将查找条件添加到Rails中的所有活动记录模型

ste*_*ard 6 activerecord ruby-on-rails find conditional-statements

反正有没有为所有Active记录模型添加查找条件?

这是我想要这个查询

ExampleModel.find :all, :conditions=> ["status = ?", "active"]
Run Code Online (Sandbox Code Playgroud)

表现得和...一样

ExampleModel.find :all
Run Code Online (Sandbox Code Playgroud)

在每个模型中

谢谢!!

mol*_*olf 17

你可以使用default_scope:

class ExampleModel < ActiveRecord::Base
  default_scope :conditions => ["status = ?", "active"]
end
Run Code Online (Sandbox Code Playgroud)

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

class MyModel < ActiveRecord::Base
  default_scope :conditions => ["status = ?", "active"]
end
class ExampleModel < MyModel
end
Run Code Online (Sandbox Code Playgroud)

...或者你可以设置default_scopeActiveRecord::Base本身(如果您认为一个模型不应该有此默认范围可能是恼人的):

class ActiveRecord::Base
  default_scope :conditions => ["status = ?", "active"]
end
class ExampleModel < ActiveRecord::Base
end
Run Code Online (Sandbox Code Playgroud)

正如在评论klochner提到的,你可能还需要考虑增加一个named_scopeActiveRecord::Base,命名active,例如:

class ActiveRecord::Base
  named_scope :active, :conditions => ["status = ?", "active"]
end
class ExampleModel < ActiveRecord::Base
end
ExampleModel.active  # Return all active items.
Run Code Online (Sandbox Code Playgroud)