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

Gar*_*eth 4 named-scope ruby-on-rails anonymous-scope

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

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

...

MyModel.active.find(...)
Run Code Online (Sandbox Code Playgroud)

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

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

scope = MyModel.foo(:conditions => {:target_id => 4})
Run Code Online (Sandbox Code Playgroud)

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

khe*_*lll 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
Run Code Online (Sandbox Code Playgroud)