我可以在Rails中创建一个* un *命名范围吗?

时间:2009-12-16 14:05:09

标签: ruby-on-rails named-scope anonymous-scope

我知道你可以在Rails中创建命名范围,它允许你指定可以在以后构建的条件:

named_scope :active, :conditions => {:active => true}

...

MyModel.active.find(...)

这可以通过创建直到稍后才进行评估的代理对象来实现。我想知道的是,是否可以创建一个动态的 un 命名范围?

我的意思是,有一种方法'foo'我可以用它去

scope = MyModel.foo(:conditions => {:target_id => 4})

然后传递scope作为代理对象,我可以做更多.find或其他范围的调用?

1 个答案:

答案 0 :(得分:7)

是的,请检查Anonymous Scopes

def find_products
  scope = Product.scoped({})
  scope = scope.conditions "products.name LIKE ?", "%#{keywords}%" unless keywords.blank?
  scope = scope.conditions "products.price >= ?", minimum_price unless minimum_price.blank?
  scope = scope.conditions "products.price <= ?", maximum_price unless maximum_price.blank?
  scope = scope.conditions "products.category_id = ?", category_id unless category_id.blank?
  scope
end