我有这两个模型:
class Review < ActiveRecord::Base
belongs_to :reviewable, polymorphic: true
end
class Article < ActiveRecord::Base
has_one :review, as: :reviewable, dependent: :destroy
end
评论模型拥有一个键,可以帮助我获得属于某个用户的所有评论。
我可以得到所有这些评论:
@reviews = Review.where("user_id = ?", current_user.id)
我只想做一次评论:
@review = Review.where("user_id = ?", current_user.id).first
@article = @review.article
但是,我现在如何从@reviews列表中获取与这些评论相关的所有文章的列表?
答案 0 :(得分:0)
如果@article = @review.article
代码有效,那么您只想询问如何迭代一组评论?在那种情况下
@reviews = Review.where("user_id = ?", current_user.id)
# in your view
@reviews.each do |review|
review.article
end
答案 1 :(得分:0)
你可以collect:
articles = @reviews.collect {|review| review.article}
答案 2 :(得分:0)
如果您的意思是列出您的任何型号的所有相关型号。你的回答清楚了; https://stackoverflow.com/a/12784574/3425913
Thing.reflections.collect{|a, b| b.class_name if b.macro==:belongs_to}.compact
你也可以打电话:has_many或:has_one association
答案 3 :(得分:0)
您可以急切加载关联
@reviews = Review.where("user_id = ?", current_user.id).includes(:reviewable)
如果您确实需要所有可审阅者,您可以: -
@reviewables = @reviews.map(&:reviewable).uniq