【问题标题】:Get list of all belongs_to models in polymorphic association获取多态关联中所有belongs_to模型的列表
【发布时间】:2015-01-31 03:36:36
【问题描述】:

我有这两个模型:

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

【问题讨论】:

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


    【解决方案1】:

    如果@article = @review.article 代码有效,那么您只是在问如何迭代一组评论?那样的话

    @reviews = Review.where("user_id = ?", current_user.id)
    
    # in your view
    @reviews.each do |review|
      review.article
    end
    

    【讨论】:

      【解决方案2】:

      你可以collect:

      articles = @reviews.collect {|review| review.article}
      

      【讨论】:

        【解决方案3】:

        如果您的意思是列出所有与您的任何模型相关的模型。你的答案很清楚; https://stackoverflow.com/a/12784574/3425913

        Thing.reflections.collect{|a, b| b.class_name if b.macro==:belongs_to}.compact
        

        你也可以调用 :has_many 或 :has_one 关联

        【讨论】:

          【解决方案4】:

          您可以急切地加载关联

          @reviews = Review.where("user_id = ?", current_user.id).includes(:reviewable)
          

          如果您真的需要所有可审查的内容,您可以:-

          @reviewables = @reviews.map(&:reviewable).uniq
          

          【讨论】:

            猜你喜欢
            • 2016-10-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-08-14
            • 1970-01-01
            相关资源
            最近更新 更多