我的架构有Articles
并且Journals
可以用Tags
. 这需要has_many through:
与我的Tagging
连接表的多态关系关联。
好的,这是简单且有据可查的部分。
我的问题是Articles
可以同时拥有主标签和子标签。主要标签是我最感兴趣的,但我的模型还需要跟踪这些子标签。子标签只是描述Article
不太重要的标签,但来自同一个全局池Tags
。(事实上,一个Article
人的主标签可能是另一个人的子标签)。
实现这一点需要Article
模型有两个与Tagging
模型的关联和两个has_many through:
与Tags
(即#tags & #sub-tags)的关联
这是我到目前为止所拥有的,虽然有效并没有将主标签和子标签分开。
class Article < ActiveRecord::Base
has_many :taggings, as: :taggable
has_many :tags, through: :taggings
has_many :sub_taggings, as: :taggable, class_name: 'Tagging',
source_type: 'article_sub'
has_many :sub_tags, through: :sub_taggings, class_name: 'Tag', source: :tag
end
class Tagging < ActiveRecord::Base
# id :integer
# taggable_id :integer
# taggable_type :string(255)
# tag_id :integer
belongs_to :tag
belongs_to :taggable, :polymorphic => true
end
class Tag < ActiveRecord::Base
has_many :taggings
end
我知道在那里的某个地方我需要找到正确的组合,source
但source_type
我无法解决。
为了完整起见,这是我article_spec.rb
用来测试的——目前在“不正确的标签”上失败了。
describe "referencing tags" do
before do
@article.tags << Tag.find_or_create_by_name("test")
@article.tags << Tag.find_or_create_by_name("abd")
@article.sub_tags << Tag.find_or_create_by_name("test2")
@article.sub_tags << Tag.find_or_create_by_name("abd")
end
describe "the correct tags" do
its(:tags) { should include Tag.find_by_name("test") }
its(:tags) { should include Tag.find_by_name("abd") }
its(:sub_tags) { should include Tag.find_by_name("abd") }
its(:sub_tags) { should include Tag.find_by_name("test2") }
end
describe "the incorrect tags" do
its(:tags) { should_not include Tag.find_by_name("test2") }
its(:sub_tags) { should_not include Tag.find_by_name("test") }
end
end
提前感谢您为实现这一目标提供的任何帮助。主要问题是我不知道如何告诉 Rails 用于文章中 sub_tags 关联的 source_type。