获取多态关联中所有belongs_to模型的列表

时间:2015-01-31 03:36:36

标签: ruby-on-rails ruby-on-rails-4 polymorphic-associations

我有这两个模型:

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列表中获取与这些评论相关的所有文章的列表?

4 个答案:

答案 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