4

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

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

...

MyModel.active.find(...)

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

我的意思是,有没有一种我可以使用的方法“foo”

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

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

4

1 回答 1

7

是的,检查匿名范围

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
于 2009-12-16T14:07:29.920 回答