Я просто не вижу, что не так с этим кодом.Вот спецификация:
it "Meta tags should not duplicate for a particular page" do
p1 = Page.create!(:title => 'first page', :body_text => 'p1 body text')
p2 = Page.create!(:title => 'second page', :body_text => 'p2 body text')
p1.add_meta_tag(:content => 'alexa', :description => '100')
p2.add_meta_tag(:content => 'alexa', :description => '200')
p1.meta_tags.where("content = 'alexa'").should have(1).record
p2.meta_tags.where("content = 'alexa'").should have(1).record
end
Модели:
class Page < AR::Base
has_many :page_to_meta_tag_maps
has_many :meta_tags, :through => :page_to_meta_tag_maps
# BONEHEAD PROBLEM PROBABLY HERE...
def add_meta_tag(options)
@cm = self.meta_tags.where(["content=?", options[:content]]).first
@current_meta = @cm || MetaTag.create(options)
@current_meta.description = options[:description]
self.meta_tags << @current_meta
end
end
class PageToMetaTagMap < ActiveRecord::Base
belongs_to :page
belongs_to :meta_tag
end
class MetaTag < ActiveRecord::Base
attr_accessible :content, :description
has_many :page_to_meta_tag_maps
has_many :pages, :through => :page_to_meta_tag_maps
end
Спецификация не работает, говоря, что есть 2 записи, а не 1. Логи показывают, что Rails делает INSERT каждуювремя, и @cm в области ЗАДАЧИ КОСТНОЙ ЧАСТИ всегда равен нулю.Я, должно быть, в корне неправильно понимаю что-то здесь.
Мне нравится, когда это происходит, и есть нехватка времени: (