ran*_*its 4 activerecord ruby-on-rails
我正在处理的项目中有一个named_scope,如下所示:
# default product scope only lists available and non-deleted products
::Product.named_scope :active, lambda { |*args|
Product.not_deleted.available(args.first).scope(:find)
}
Run Code Online (Sandbox Code Playgroud)
最初的named_scope很有意义。这里令人困惑的部分是.scope(:find)的工作方式。显然,这将调用另一个命名范围(未删除),然后再应用.scope(:find)。.scope(:find)在这里做什么/如何工作?
快速解答
Product.not_deleted.available(args.first)
Run Code Online (Sandbox Code Playgroud)
是一个本身由两个命名范围合并而成的命名范围。
scope(:find) 获取命名范围(或范围的组合)的条件,您可以依次使用这些条件来创建新的命名范围。
因此,通过示例:
named_scope :active, :conditions => 'active = true'
named_scope :not_deleted, :conditions => 'deleted = false'
Run Code Online (Sandbox Code Playgroud)
然后你写
named_scope :active_and_not_deleted, :conditions => 'active = true and deleted = false'
Run Code Online (Sandbox Code Playgroud)
或者,你可以写
named_scope :active_and_not_deleted, lambda { self.active.not_deleted.scope(:find) }
Run Code Online (Sandbox Code Playgroud)
这是相同的。我希望这一点很清楚。
注意,这在rails 3中变得更简单(更干净),您只需编写
scope :active_and_not_deleted, active.not_deleted
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3398 次 |
| 最近记录: |