是否有將查找條件添加到所有活動記錄模型的方法?爲Rails中的所有活動記錄模型添加查找條件
是我想這個查詢
ExampleModel.find :all, :conditions=> ["status = ?", "active"]
有同樣的表現方式
ExampleModel.find :all
在每一個模型
謝謝!
是否有將查找條件添加到所有活動記錄模型的方法?爲Rails中的所有活動記錄模型添加查找條件
是我想這個查詢
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,你可能還需要考慮增加一個named_scope
到ActiveRecord::Base
,命名爲active
,例如:
class ActiveRecord::Base
named_scope :active, :conditions => ["status = ?", "active"]
end
class ExampleModel < ActiveRecord::Base
end
ExampleModel.active # Return all active items.
更新:named_scope
是Rails的3.1 deprecated/renamed。截至3.2.8,新方法被稱爲scope
它使用where
方法,而不是:conditions
老:
named_scope :active, :conditions => ["status = ?", "active"]
新:
scope :active, where(:status => "active")
或
scope :active, where("status = ?", "active")
如何關於ActiveRecord :: Base的命名範圍?如果項目得到共享,那麼混淆其他開發者的可能性就會降低。 – klochner 2009-08-25 16:14:45
@ klochner,是的,好點。使用像ExampleModel.active這樣的東西非常有表現力。 – molf 2009-08-25 16:23:24
來清理它多一點,你可以從ActiveRecord派生一個具有命名(或新的默認)作用域的類,並從中派生出ExampleModel。現在新功能是明確的。 – klochner 2009-08-25 19:26:40