Sto usando Ruby on Rails 3.2.2 e vorrei recuperare/scope gli oggetti associati "specificando"/"filtrando" un valore di attributo su quegli oggetti associati. Cioè, in questo momento sto usando il seguente codice:Come utilizzare i metodi di scope DRY usati in due classi diverse?
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
Nel codice sopra la clausola where('articles.title LIKE ?', "%#{search}%")
viene ripetuto due volte e così ho pensato che può essere migliorata con il principio DRY: è possibile utilizzare il metodoArticle.search_by_title
direttamente nel metodoArticleAssociation.search_by_article_title
?
casi d'uso tipici sono:
ArticleAssociation.search_by_article_title("Sample string")
Article.search_by_title("Sample string")
Ho affrontato questa stessa situazione in un progetto (4 modelli correlati) e ho creato un modulo per contenere i metodi di ricerca comuni. Ut non è esattamente quello che chiedi ma è una soluzione tipica. – tokland
Il codice condiviso tra le classi di solito finisce in un modulo – apneadiving
in questo modo, i selettori di squeel possono essere usati per questo, ma l'uso di squeel invece di AR è un grande cambiamento. Https://github.com/ernie/squeel#sifters – tokland