我有以下模型及其相关关联:
class User < ActiveRecord::Base
has_many :reviews
has_many :ratings
end
class Product < ActiveRecord::Base
has_many :reviews
has_many :ratings
end
class Review < ActiveRecord::Base
belongs_to :product
belongs_to :user
end
class Rating < ActiveRecord::Base
belongs_to :product
belongs_to :user
end
鉴于具体Rating
,我需要转到相应的Review
(如果存在评论)。
我需要保持ratings
和reviews
松散耦合。 (我不想设置我的模型,以便Review
belongs_to
和Rating
)
如何设置与rating's
的{{1}}关联?
一旦我在视图中使用特定评级,我可以致电reviews
,但如果可能的话,我希望它更清洁/更高效。
有什么想法吗?
感谢。
答案 0 :(得分:2)
尝试使用:条件如下:
class Rating < ActiveRecord::Base
has_many :reviews,
:through => :user,
:source => :reviews,
:conditions => ['#{Review.table_name}.product_id = #{product_id}']
end
如果这不起作用,请改为执行此操作(非常类似于@RobinBrouwer的回答):
class Rating < ActiveRecord::Base
def reviews
user.reviews.where(:product => product)
end
end
答案 1 :(得分:0)
您可以创建has_many :through
关系来获取所有评论。
class Rating < ActiveRecord::Base
belongs_to :product
belongs_to :user
has_many :product_reviews, :through => :product, :source => :reviews
end
您现在可以执行以下操作,如上所述:
@rating.product_reviews.where(:user_id => @rating.user.id).first
不是很好的改进。你可以将它放在一个实例方法中来清理:
def review
product_reviews.where(:user_id => user_id).first
end
现在您只需执行以下操作即可获得相同的结果:
@rating.review
就是这样。