【问题标题】:Polymorphic has_many: through in rails多态has_many:在rails中通过
【发布时间】:2012-04-11 06:55:57
【问题描述】:

我有一个标签模型,我希望它是多态的,但我不想为“视频”标签创建五个记录,例如,我想创建一次标签并能够在各种型号。我已经在这里准备了一些关于这样做的问题,但我不太明白如何让它发挥作用。

所以我有:

class Tag < ActiveRecord::Base
  belongs_to :tagable, :polymorphic => true

end

class Post < ActiveRecord::Base
  has_many :tags, :through => :tag_assignments

end

class TagAssignment < ActiveRecord::Base
      has_many :tags, :as => :taggable

end

在我看来这应该可行,但是...阅读所有questions 在这里我知道我需要在某处使用:source =&gt; 选项将它们联系在一起,但我只是没有完全遵循如何做它。有人可以帮忙吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 activerecord


    【解决方案1】:

    您必须按如下方式重做模型:

    class Tag < ActiveRecord::Base
      has_many :tag_assignments
    end
    
    class TagAssignment < ActiveRecord::Base
      belongs_to :tagable, :polymorphic => true
      belongs_to :tag
    end
    
    class Post < ActiveRecord::Base
      has_many :tag_assignments, :as => :tagable
      has_many :tags, :through => :tag_assignments
    end
    

    现在给定一个帖子,您可以按如下方式获取它的标签:

    post.tags
    

    注意

    您应该考虑将acts-as-taggable-on gem 用于您的用例。

    【讨论】:

    • 好的,所以中间表是多态表。有道理。
    猜你喜欢
    • 2013-07-08
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    相关资源
    最近更新 更多