Rails通过两种不同的关系获得相关项目

时间:2011-12-01 21:20:41

标签: ruby ruby-on-rails-3

我有一个“两个中间人”模型设置,如下所示:

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

1 个答案:

答案 0 :(得分:1)

def movies
  Movie.includes(:ratings, :comments).where("`ratings`.user_id = ? OR `comments`.user_id = ?", self.id, self.id)
end

未经测试,但我非常确定使用joins代替includes也可以。