我有一个由类表示的内容模型:content。现在用户可以对内容进行评分、评论或两者兼而有之。我想找到用户评分、评论或评分和评论的所有内容。评论表与内容表具有多对一的关联(意味着可以多次评论内容)。评级表和内容表之间存在类似的关系。
我在想我应该做单独的查询来查找用户的所有评分内容,然后是用户的所有评论内容,然后进行联合。但我不知道如何做一个返回活动记录关系的联合。我需要一个关系,因为我想对结果进行分页。
谢谢你。
我有一个由类表示的内容模型:content。现在用户可以对内容进行评分、评论或两者兼而有之。我想找到用户评分、评论或评分和评论的所有内容。评论表与内容表具有多对一的关联(意味着可以多次评论内容)。评级表和内容表之间存在类似的关系。
我在想我应该做单独的查询来查找用户的所有评分内容,然后是用户的所有评论内容,然后进行联合。但我不知道如何做一个返回活动记录关系的联合。我需要一个关系,因为我想对结果进行分页。
谢谢你。
好的,首先让我们设置您的模型。从你的解释我想你会想要这样的东西:
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
(user.reviewed_contents + user.rated_contents).uniq
返回一个数组,而不是一个关系,所以要小心。您可以通过尝试调用类方法@posts
(分页除外)来测试这一点。
你仍然可以分页。只需使用@posts.paginate
, 因为will_paginate
gem 为数组类添加了一个分页方法。