내 스키마는 Tags
으로 태그를 지정할 수있는 Articles
및 Journals
입니다. 이 경우 과 Tagging
조인 테이블의 다형성 관계가 필요합니다.두 개의 다형성을 가진 레일스 모델 has_many through : 객체 태깅을위한 연관
오케이, 간단하고 잘 문서화 된 부분입니다.
내 문제는 Articles
이 기본 태그와 하위 태그를 모두 가질 수 있다는 것입니다. 기본 태그는 내가 가장 관심을 갖고있는 것이지만, 내 모델은이 하위 태그를 추적해야합니다. 하위 태그는 덜 중요한 중요도 인 Article
을 설명하는 레이블이지만 동일한 글로벌 풀 Tags
에서 오는 레이블입니다. (사실 Article
의 기본 태그는 다른 하위 태그 일 수 있습니다). 이 달성
이 내가 유효한는 않지만, 이는 지금까지 무슨이다 Tagging
모델이 개 협회 및 Tags
두 has_many through:
협회 (즉 #tags & # 하위 태그)
을 위해 Article
모델이 필요 기본 태그와 하위 태그를 분리하지 마십시오.
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
의 오른쪽 조합을 찾아야하지만 난 그것을 밖으로 작동하지 않을 수 있다는 것을 알고.
완전성을 위해 여기에 ""이 테스트를 위해 사용하고 있습니다. 현재 "잘못된 태그"에 실패하고 있습니다.
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에 source_type을 사용하여 기사에서 sub_tags 연관을 사용하는 방법을 설명 할 수 없다는 것입니다.