Je suis dans une situation où je dois obtenir tous articles
qui sont liés à un User
à 2 tables:Choisir parmi plusieurs tables dans Rails - A de nombreux "articles" à travers [table_1, table_2]?
- article_access: donne le privilège aux utilisateurs de voir un article
- article_favorites: des articles publics, les utilisateurs ont ces favorited
Alors ActiveRecord vous pourriez avoir ceci:
class User < ActiveRecord::Base
has_many :article_access_tokens
has_many :article_favorites
def articles
unless @articles
ids = article_access_tokens.all(:select => "article_id").map(&:article_id) + article_favorites.all(:select => "article_id").map(&:article_id)
@articles = Article.send(:scoped, :conditions => {:id => ids.uniq})
end
@articles
end
end
Cela me donne essentiellement une association articles
qui lit à partir de deux tables distinctes. La question est cependant, quelle est la droite façon de faire cela? Puis-je d'une manière ou d'une autre faire 1 appel SQL SELECT pour cela?