有没有办法将查找条件添加到所有Active record模型中?
也就是说,我想要这个查询:
ExampleModel.find :all, :conditions=> ["status = ?", "active"]
表现出与...相同的行为
ExampleModel.find :all
在每个模型中
谢谢!
有没有办法将查找条件添加到所有Active record模型中?
也就是说,我想要这个查询:
ExampleModel.find :all, :conditions=> ["status = ?", "active"]
表现出与...相同的行为
ExampleModel.find :all
在每个模型中
谢谢!
您可以使用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
或者你可以在ActiveRecord::Base
本身上设置default_scope
(如果您决定一个模型不应该有这个默认范围,则可能很麻烦):
class ActiveRecord::Base
default_scope :conditions => ["status = ?", "active"]
end
class ExampleModel < ActiveRecord::Base
end
正如klochner在评论中提到的那样,您可能还希望考虑向ActiveRecord::Base
添加一个名为active
的named_scope
:
class ActiveRecord::Base
named_scope :active, :conditions => ["status = ?", "active"]
end
class ExampleModel < ActiveRecord::Base
end
ExampleModel.active # Return all active items.