over 1 year ago

scope就是相当于以前洗衣服手洗的话要分很多步骤,现在来了一个全自动洗衣机,把这些步骤都打包好了,你只要一声下令“帮我洗衣服“这个管家就给你搞定了

它的作用就是将常用或者麻烦的对象关系映射(Object Relation Mapping)语法组合成懒人包,下次要用这个功能就叫它的名字就好了
比如:
class Topic < ActiveRecord::Base
scope :recent, -> { order("created_at DESC") }
end
recent这个scope定义好了以后,我们要语句的功能的时候,叫小名,后面.rencent这个方法就可以实现后面花括号里的功能了


在Joblisting里面有没有带参数的例子:
class Post < ActiveRecord::Base
scope:published, -> { where(published: true) }
end

讨论版课程里面带参数的列子:
class Post < ActiveRecord::Base
scope :created_before, ->(time) { where("created_at < ?", time) }
end

还可以几个scope方法接在一起使用,顺序无影响,比如:
class Event < ActiveRecord::Base
scope :published, -> { where(published: true) }
scope :created_before, ->(time) { where("created_at < ?", time) }
end
将published和created_before两个scope接起来使用:
Event.published.created_before(Time.now)
但是最好不要太多,后续代码维护起来可能比较麻烦

← 深入学习validation bootstrap栅格系统之.container.fluid →