Sli*_*k23 1 activerecord ruby-on-rails ruby-on-rails-3
我有一个标签模型,我希望它是多态的,但我不希望“视频”标签有五个记录,例如,我想创建一次标签并能够在各种模型上使用它。我已经在这里准备了一些有关这样做的问题,但我不太明白如何使其发挥作用。
所以我有:
class Tag < ActiveRecord::Base
belongs_to :tagable, :polymorphic => true
end
Run Code Online (Sandbox Code Playgroud)
和
class Post < ActiveRecord::Base
has_many :tags, :through => :tag_assignments
end
Run Code Online (Sandbox Code Playgroud)
和
class TagAssignment < ActiveRecord::Base
has_many :tags, :as => :taggable
end
Run Code Online (Sandbox Code Playgroud)
在我看来,这应该可行,但是......阅读这里的所有问题,我知道我需要一个:source =>选项将它们连接在一起,但我只是没有完全遵循如何做到这一点。有人可以帮忙吗?
您必须按如下方式重做模型:
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
Run Code Online (Sandbox Code Playgroud)
现在给定一个帖子,您可以按如下方式获取其标签:
post.tags
Run Code Online (Sandbox Code Playgroud)
笔记
您应该考虑在您的用例中使用acts-as-taggable-on gem。
| 归档时间: |
|
| 查看次数: |
858 次 |
| 最近记录: |