Всем привет!
Имеются 2 модели:
class Hashtag < ActiveRecord::Base<br>
has_and_belongs_to_many :photos<br>
attr_accessible :name<br>
***<br>
end<br><br>
class Photo < ActiveRecord::Base<br>
has_and_belongs_to_many :hashtags, :uniq => true<br>
***<br>
end<br>
Join таблица:
def up<br>
create_table :hashtags_photos, :id => false do |t|<br>
t.integer :photo_id<br>
t.integer :hashtag_id<br>
end<br><br>
add_index :hashtags_photos, [:photo_id, :hashtag_id], :unique => true<br>
end<br>
При создании Photo в before_safe передается следующий метод:
def set_hashtags<br>
text.scan(/#[[:alnum:]]+/).each do |workpiece|<br>
next if workpiece.length > 25<br>
hashtag = Hashtag.find_by_name(workpiece)<br>
if hashtag<br>
hashtag.touch<br>
else<br>
hashtag = Hashtag.new(:name => workpiece).save!<br>
end<br>
hashtags << hashtag<br>
end <br>
end<br>
Где text — поле у Photo, которое всегда не nil. Все бы здорово, но не работает. Сыпет вот такими ошибками:
ActiveRecord::AssociationTypeMismatch: Hashtag(#70309985182100) expected, got TrueClass(#70309973845700)<br>
Пробовал юзать методы first_or_initialize и first_or_create!, все безрезультатно. Видимо я просто не понимаю как рельсы работают с has_and_belongs_to_many.
В чем косяк?