一、命名的scope
在Model中加
scope :recent, where().order()
然后在Controller里面用
Model.recent
就能调用查询了,scope可以把一些复杂的查询方法包到一起方便代码的维护
二、有lambda的scope
如果想在recent的时候传一些参数,比如限制查询的limit数量,需要加上lambda
scope :recent, lambda { |num = nil| where().order().limit(num) }
这样就能在Controller里面这样
Model.recent(5)
如果不传参数就会默认令num=nil,此时会查询所有的数据
三、默认的scope
default_scope :recent, where().order
在Controller中只要调用查询方法就会执行recent动作,不用在Controller里面手动调用recent了
四、Model的create传scope
current_user.followings.create!(params[:following])
这样就不用Following.new并把current_user传给new出来的Following再保存了。
五、跳过filter过滤
如果想指定一个页面可以随便被任何用户访问,那么我们应该这样
before_filter :require_login, :except => [:show]
这样Controller里面的show方法在执行前就不会要求用户先登陆再说了
六,胖胖的Model和瘦瘦的Controller
将复杂的逻辑业务封装到Model中是一个很好的习惯,保持Controller中代码的干净更利于维护
重构之前的代码:
重构之后的代码: