カスタム検索条件を設定する必要があるモデルがいくつかあります。たとえば、Contactモデルがある場合、Contact.findが呼び出されるたびに、使用中のアカウントにのみ属する、返される連絡先を制限したいと思います。
私はこれをグーグルで見つけました(私は少しカスタマイズしました):
def self.find(*args)
with_scope(:find => { :conditions => "account_id = #{$account.id}" }) do
super(*args)
end
end
account_idがあいまいな場合を除いて、これはうまく機能するので、次のように調整しました。
def self.find(*args)
with_scope(:find => { :conditions => "#{self.to_s.downcase.pluralize}.account_id = #{$account.id}" }) do
super(*args)
end
end
これもうまくいきますが、DRYにしたいです。今、私はこの種の関数を使用したいいくつかの異なるモデルを持っています。これを行うための最良の方法は何ですか?
あなたが答えるとき、私たちの心がメタプログラミングRuby-fuを理解するのを助けるためにコードを含めてください。
(私はRails v2.1を使用しています)