Benim şemam Tags
ile etiketlenebilir Articles
ve Journals
vardır. Bu benim Tagging
birleştirme tablosuna bir polimorfik ilişki ile bir has_many through:
ilişki gerektirir.İki polimorfik has_many ile ray modeli: nesne etiketleme için ilişkilendirmeler
Tamam, bu kolay ve iyi belgelenmiş bir bölümdür.
Sorunum, Articles
'un hem birincil etiketlere hem de alt etiketlere sahip olabileceğidir. Birincil etiketler en çok ilgilendiğim şeydir, ancak modelimin de bu alt etiketleri takip etmesi gerekir. Alt etiketler, daha az önem taşıyan Article
'u tanımlayan etiketlerdir, ancak aynı global Tags
havuzundan gelir. (aslında, bir Article
'un birincil etiketi başka bir alt etiketi olabilir). Bu ulaşılması
Bu benim geçerli yapar iken, hangi bugüne kadar ne var Tagging
modeline iki dernek ve Tags
iki has_many through:
dernek (yani #tags & # alt etiketleri)
olması Article
modeli gerektirir birincil etiketleri ve alt etiketleri ayrı tutmayın.
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
Oralardan I source
ve source_type
doğru kombinasyonunu bulmak gerekir ama bunu dışarı çalışamaz biliyoruz.
Tam olarak burada test etmek için kullanıyorum article_spec.rb
benim "yanlış etiketler" üzerinde başarısız oluyor.
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
Bunu gerçekleştirme konusunda herhangi bir yardım için şimdiden teşekkür ederiz. Ana sorun, Source_type makalelerinde Sub_tags ilişkilendirmesi için kullanılacak Rails'e nasıl söyleneceğimi anlayamıyorum.