多态has_many:通过轨道

时间:2012-03-27 17:37:42

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

我有一个标签模型,我想要多态,但我不想要五个记录的“视频”标签,例如,我想创建一次标签,并能够在一个标签上使用它各种型号。我已经准备好了一些关于这样做的问题,但我还没有完全了解如何让它发挥作用。

所以我得到了:

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 =>选项在那里把它们绑在一起,但我只是不跟随究竟该怎么做。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:4)

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

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用于您的用例。