我有一个由类代表的内容模型:内容。现在,用户可以评估内容,审核内容或同时执行这两项操作。我想查找用户评级,已审核或评分和评论的所有内容。 评论表与内容表具有多对一关联(表示内容可以多次审核)。 评分表与内容表之间存在类似的关系。
我想我应该单独查询以查找用户的所有评分内容,然后由用户查看所有评论的内容,然后进行联合。但我无法找到如何做一个返回活动记录关系的联合。我需要一个关系,因为我想对结果进行分页。
谢谢。
答案 0 :(得分: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
答案 1 :(得分:2)
(user.reviewed_contents + user.rated_contents).uniq
返回一个数组,而不是关系,所以要小心。您可以通过尝试在@posts
(除了paginate之外)调用类方法来测试它。
你仍然可以分页。只需使用@posts.paginate
,因为will_paginate
gem会在数组类中添加 paginate 方法。