用Paperclip上传多个附件
在Rails程序里上传文件你会用什么呢?反正我是用的paperclip,至少它支持Ruby1.9和Rails3。哪个2B再抄我的文章甚至是改我的文章天天夜里和猪爱爱白天一直吃猪粮!
这是tutorial,所以你只需要按照步骤来就能完成一个可运行的DEMO。前提是我用的ruby 1.9.2preview3和Rails 3.0.0.beta4,你可以与我不同,不过我不保证会顺利。
我要说的是Post与Asset之间has_many的association,就是一个Post有很多的Asset。如果你只想要has_one的可以直接参看paperclip的快速入门
准备工作
我们需要一个新的Rails项目weblog,然后添加一个Post
gem install paperclip rails weblog cd weblog rails g scaffold post title:string body:text rake db:migrate rails s
好的,访问http://localhost:3000/posts,现在一个简单的blog就完成了。
Rails需要一个JSON Builder
说过要写tutorials的,我却发现自己写的东西越来越中国化了,就是很装逼却没实际价值,高手不屑一看,新手看不懂的境界。
于是,我决定以后写的詳細一点。不过在我如此混乱的文字组织下,可能就找不到重点了
我有很多的events,想返回JSON格式,只需要这样写
class EventsController < ApplicationController respond_to :json def index respond_with(@events) end end
Rails很智能,它会自动的使用@events.to_json来返回JSON,大部分时间这就是我想要的,可现在问题出现了。。。
我不喜欢默认的这个JSON,比如我需要给这个JSON加一个值"total":69。如果是XML格式,Rails提供了Builder,可我没找到比较方便的JSON Builder
针对现在小小的需求,可以这样做
READ MORE>>
Rails中STI的RESTful routes问题
不解释,你是知道STI的——single table inheritance,我们看下问题是什么
现在有两个Model:Asset和Image
class Asset < ActiveRecord::Base; end class Image < Asset; end
我们定义了这样一个RESTful routes
resources :assets
然后在我们的AssetsController里面
class AssetsController < ApplicationController def create @asset = Asset.new params[:asset] @asset.save respond_with(@asset) end def update @asset.update_attributes params[:asset] end end
给Rails程序添加主题切换功能
Ruby 1.9强大的编码问题
如果你用Ruby 1.9不会没有遇到过编码的问题吧,Ruby 1.9支持强大的m17n,强大到我一开始接触它都要疯掉了。。。
作为一个好屁民我决定把我的痛苦经历写一写,毕竟我还没见过这方面的中文介绍。Ruby是一种很特别的语言,Ruby 1.9更是个神奇的存在。我是用Ruby 1.9后才知道还有m17n这一说法的,看来我太寡聞了么
我遇到的错误,相信你也遇到过,除非你都用的ASCII码或者你比Ruby更怪
ActionView::Template::Error (incompatible character encodings: ASCII-8BIT and UTF-8)
伟大的革命精神是怎样的?克服一切困难,没有问题也要制造问题然后解决它。解决问题之前,先来介绍一点Ruby 1.9 encoding的处理方式。
谈到编码,自然就要讲字符串,Ruby 1.9中的字符串不是一个人,他已经被编码附体了!
一个String对象不仅包含着一般意义上的字符串,还有一个Encoding对象与它关联
irb(main):014:0> s = '中文' => "中文" irb(main):015:0> s.encoding => #<Encoding:UTF-8>
移动化我的Blog
感觉移动化这个词好别扭啊,我用这个词的意思是让我的Blog更适合用手机等移动设备阅读,用你的Android手机或iPhone访问看一下吧。
要将一个Rails程序mobilize是很简单的,我们开始吧
Controller需要一个before_filter
把下面的代码作为before_filter加入到一个合适的Controller中,合适的标准是什么呢?我也不太清楚了,或许你可以加在ApplicationController中
def detect_browser if params[:format].blank? unless session.has_key? 'mobile' agent = request.headers["HTTP_USER_AGENT"].downcase session[:mobile] = agent.match(MOBILE_BROWSERS) ? 'true' : 'false' end params[:format] = 'mobile' if 'true' == session[:mobile] elsif 'mobile' == params[:format] session[:mobile] = 'true' elsif 'html' == params[:format] session[:mobile] = 'false' end end
EsKit使用指南
EsKit是一个基于Ruby on Rails的博客系统,嗯,ABitNo造的轮子。一些特点可以参见上一篇文章:低调发布我的 Blog程序
或许你只是需要尝试一下,我为大家部署了一个Demo,你就尽情蹂躏它吧
这里是后台地址:http://eskit.abitno.me/admin
用户名:admin, 密码:rubyonrails
感觉不错吗?想学习Rails?或者想测试下Rails 3写出来的程序?亲自部署一个试试看吧!你的每一次部署都是对俺的支持啊!!你能因此喜欢上Rails我会开心死的!!!假如EsKit让你对Rails开始反感,千万不要告诉我,我喜欢听好听的--囧
安装Ruby
开发使用的ruby 1.9.1p378,还没对其他ruby版本进行测试,推荐你也安装此版本吧,会少些问题,这里是官方FTP ftp://ftp.ruby-lang.org/pub/ruby/1.9/
Linux的源里一般都有这个版本,你要真找不到就到ftp上下载解压,然后
./configure --prefix=/opt/ruby191 make sudo make install
