0

我有一个由类表示的内容模型:content。现在用户可以对内容进行评分评论或两者兼而有之。我想找到用户评分评论评分和评论的所有内容。评论表与内容表具有多对一的关联(意味着可以多次评论内容)。评级表和内容表之间存在类似的关系。

我在想我应该做单独的查询来查找用户的所有评分内容,然后是用户的所有评论内容,然后进行联合。但我不知道如何做一个返回活动记录关系的联合。我需要一个关系,因为我想对结果进行分页。

谢谢你。

4

2 回答 2

2

好的,首先让我们设置您的模型。从你的解释我想你会想要这样的东西:

class Content < ActiveRecord::Base
  has_many :reviews
  has_many :reviewing_users, :through => :reviews, :class_name => "User"

  has_many :ratings
  has_many :rating_users, :through => :ratings, :class_name => "User"
end

class User < ActiveRecord::Base
  has_many :reviews
  has_many :reviewed_contents, :through => :reviews, :class_name => "Content"

  has_many :ratings
  has_many :rated_contents, :through => :ratings, :class_name => "Content"
end

class Review < ActiveRecord::Base
  belongs_to :content
  belongs_to :user
end

class Rating < ActiveRecord::Base
  belongs_to :content
  belongs_to :user
end

然后对于给定的用户,您可以找到他们审查和/或评分的所有内容:

( user.reviewed_contents + user.rated_contents ).uniq
于 2012-06-30T08:11:37.910 回答
2

(user.reviewed_contents + user.rated_contents).uniq返回一个数组,而不是一个关系,所以要小心。您可以通过尝试调用类方法@posts(分页除外)来测试这一点。

你仍然可以分页。只需使用@posts.paginate, 因为will_paginategem 为数组类添加了一个分页方法。

于 2012-08-10T03:12:47.073 回答