如何在多态关联中访问“belongs_to”对象?

时间:2015-05-27 21:19:26

标签: ruby-on-rails

我在“belongs_to”关联中访问模型时遇到了困难。我有“发布”和“评论”模型,每个模型都可以有很多“喜欢”。现在,我可以访问

  

comment.likes

  

post.likes

但如果我尝试

,我会得到一个“未定义的方法”
  

like.comment

我尝试按如下方式实现Rails关联:

class Post < ActiveRecord::Base
  include Likeable

....

class Comment < ActiveRecord::Base
  include Likeable

我有一个“可爱的”模块:

module Likeable
  extend ActiveSupport::Concern

  included do
    has_many :likes, as: :likeable,
      class_name: "Like",
      dependent: :destroy
  end

我的“喜欢”模型部分看起来如下:

class Like < ActiveRecord::Base
  validates :author_id, presence: true, uniqueness: { scope: [:likeable_id, :likeable_type]}

  belongs_to :likeable, polymorphic: true

我相信一切都在数据库层上正确设置。上面的Rails层看起来如何? 任何建议/意见赞赏!谢谢!

1 个答案:

答案 0 :(得分:2)

多态关联的整个想法是,从Like方面来看,你不需要知道它与之关联的内容,以便调用该关联对象。

IE中。您应该仅使用like.likeable访问关联的对象,并返回CommentPost实例,具体取决于与此Like相关联的实例。