私はRuby on Rails 3.2.2を使用していますが、これらの関連オブジェクトの属性値を「指定」/「フィルタリング」することで、スコープ関連のオブジェクトを取得したいと思います。上記のコードで2つの異なるクラスで使用されるスコープメソッドをどのようにDRYするのですか?
class Article < ActiveRecord::Base
def self.search_by_title(search)
where('articles.title LIKE ?', "%#{search}%")
end
end
class ArticleAssociation < ActiveRecord::Base
def self.search_by_article_title(search)
joins(:article).where('articles.title LIKE ?', "%#{search}%")
end
end
where('articles.title LIKE ?', "%#{search}%")
句を2回繰り返しているので、私はそれはDRY原則を向上させることができることを考えた:つまり、この時点で私は、次のコードを使用しています、ですはそれを使用することが可能ですArticle.search_by_title
方法に直接ArticleAssociation.search_by_article_title
の方法では?
典型的な使用例は以下のとおりです。
ArticleAssociation.search_by_article_title("Sample string")
Article.search_by_title("Sample string")
私はこの同じ状況(4つの関連モデル)に直面し、一般的な検索方法を保持するモジュールを作成しました。 Utはあなたの求めるものではありませんが、典型的な解決策です。 – tokland
クラス間で共有されるコードは、普通はモジュール – apneadiving
で終了しますが、squeelのシフターはこれに使用できますが、ARの代わりにsqueelを使うことは大きな変更です.. https://github.com/ernie/squeel#sifters – tokland