6

无论如何要为所有活动记录模型添加查找条件?

那就是我想要这个查询

ExampleModel.find :all, :conditions=> ["status = ?", "active"]

行为方式与

ExampleModel.find :all

在每个模型中

谢谢!!

4

2 回答 2

17

你可以使用default_scope

class ExampleModel < ActiveRecord::Base
  default_scope :conditions => ["status = ?", "active"]
end

如果您想在所有模型中使用它,您可以ActiveRecord::Base在所有模型中继承并派生它(可能不适用于单表继承):

class MyModel < ActiveRecord::Base
  default_scope :conditions => ["status = ?", "active"]
end
class ExampleModel < MyModel
end

...或者您可以设置default_scopeonActiveRecord::Base本身(如果您决定一个模型不应该具有此默认范围,可能会很烦人):

class ActiveRecord::Base
  default_scope :conditions => ["status = ?", "active"]
end
class ExampleModel < ActiveRecord::Base
end

正如 klochner 在评论中提到的,您可能还需要考虑添加一个named_scopeto ActiveRecord::Base,命名为active,例如:

class ActiveRecord::Base
  named_scope :active, :conditions => ["status = ?", "active"]
end
class ExampleModel < ActiveRecord::Base
end
ExampleModel.active  # Return all active items.
于 2009-08-25T08:20:01.250 回答
0

更新: 在 Rails 3.1named_scope中已弃用/重命名。从 3.2.8 开始,调用新方法,scope它使用该where方法而不是:conditions

老的:

named_scope :active, :conditions => ["status = ?", "active"]

新的:

scope :active, where(:status => "active")

或者

scope :active, where("status = ?", "active")
于 2012-08-30T18:07:02.903 回答