我有一个“两个中间人”模型设置,如下所示:
User
has_many :comments
has_many :ratings
Comment
belongs_to :user
belongs_to :movie
Rating
belongs_to :user
belongs_to :movie
Movie
has_many :comments
has_many :ratings
获得与Movies
相关联的所有User
的最佳方式是什么?(评论或评级)?
我希望能够致电User.get_movies(user_id)
并取回ActiveRecord::Relation
个对象,以便它可以链接(即User.get_movies(user_id).limit(3).order(...)
)。这将返回一个常规的旧数组,我怀疑我的数据库方式超出了我的需要。
def self.get_movies(user_id)
user = self.where(:id => user_id).includes({:comments => :movie}, {:ratings => :movie})
movies = []
user.comments.each do |comment|
movies.push(comment.movie)
end
user.ratings.each do |rating|
movies.push(rating.movie)
end
movies.uniq!
end
答案 0 :(得分:1)
def movies
Movie.includes(:ratings, :comments).where("`ratings`.user_id = ? OR `comments`.user_id = ?", self.id, self.id)
end
未经测试,但我非常确定使用joins
代替includes
也可以。