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

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

...

MyModel.active.find(...)

这通过创建未计算,直到后来上的代理对象。我想知道的是,如果有可能创建一个动态的的命名范围?

我指的是,有一个方法“富”与我可以去

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

和然后通过周围scope作为代理对象,我可以做更多.finds或其他范围的呼叫上?

有帮助吗?

解决方案

是,检查匿名作用域

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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top