代码之家  ›  专栏  ›  技术社区  ›  Gareth

我可以在Rails中创建一个未命名的作用域吗?

  •  4
  • Gareth  · 技术社区  · 15 年前

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

    named_scope :active, :conditions => {:active => true}
    
    ...
    
    MyModel.active.find(...)
    

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

    我的意思是,有没有一个方法“foo”可以让我去

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

    然后通过 scope 作为代理对象,我可以做的更多 .find S或其他作用域调用打开?

    1 回复  |  直到 15 年前
        1
  •  7
  •   khelll    15 年前

    是的,检查 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