検索条件をすべてのアクティブレコードモデルに追加する方法はありますか?Railsのすべてのアクティブレコードモデルに検索条件を追加する
私はすべてのモデルに
感謝を
ExampleModel.find :all
と同じように動作するために、このクエリ
ExampleModel.find :all, :conditions=> ["status = ?", "active"]
を希望です!
検索条件をすべてのアクティブレコードモデルに追加する方法はありますか?Railsのすべてのアクティブレコードモデルに検索条件を追加する
私はすべてのモデルに
感謝を
ExampleModel.find :all
と同じように動作するために、このクエリ
ExampleModel.find :all, :conditions=> ["status = ?", "active"]
を希望です!
あなたは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で述べたように、あなたはまた、例えば、active
という名前ActiveRecord::Base
にnamed_scope
を、追加することを検討することもできます。
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ました。
named_scope :active, :conditions => ["status = ?", "active"]
新:
scope :active, where(:status => "active")
または
scope :active, where("status = ?", "active")
どのように3.2.8の通り、新方式ではなく
:conditions
旧の
where
方法を使用していますscope
と呼ばれ、 ActiveRecord :: Baseの名前付きスコープについてプロジェクトが共有されれば、他の開発者を混乱させる可能性は低くなります。 – klochner@klochner、はい、良い点。 ExampleModel.activeのようなものを使うことは非常に表現力があります。 – molf
もう少しクリーンアップするには、名前付き(または新しい既定の)スコープを持つActiveRecordからクラスを派生させ、そこからExampleModelを派生させることができます。新しい機能が明示的になりました。 – klochner