2010-09-11 3 views
3

У меня есть простой has_many через отношения Установки:Почему Rails автоматически не создает записи таблицы соединений?

class Tag < ActiveRecord::Base 
    has_many :profile_tags 
    has_many :profiles, :through => :profile_tags 
end 

class ProfileTags < ActiveRecord::Base 
    belongs_to :profile 
    belongs_to :tag 
end 

class Profile < ActiveRecord::Base 
    has_many :profile_tags 
    has_many :tags, :through => :profile_tags 
end 

С моей точки зрения я принимаю набор тегов (только строки), и я итерация над ними в моем контроллере и вызов Tag.create (.. .) на каждом из них и подталкивая их в массив. Все это прекрасно работает.

Так что добраться до точки, где у меня есть массив объектов Tag (теги), которые каждый из возвращаемых вызова для создания и переменной @profile, которая была создана, делая Profile.new

Я хотел бы делать: @profile.tags = tags

Делая это вызывает эту ошибку на линии, где я пытаюсь задание:

uninitialized constant Profile::ProfileTag 

Rails действует как мне нужно вручную создавать и назначать таблицы объединения ассоциации, хотя здесь http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association он утверждает, что когда вы выполняете такое задание, будут созданы новые ассоциации, и если некоторые из них исчезнут, они будут удалены.

Любые идеи, что я могу делать неправильно здесь?

ответ

4

Rails предполагает, что классы моделей названы с единственной формой, то есть класс ProfileTags следует называть ProfileTag.

В зависимости от Rails версии вы используете, вероятно, самый простой способ исправить это, чтобы воссоздать модель с использованием script/destroy и script/generate в Rails 2.x или rails destroy и rails generate в Rails 3.

В качестве альтернативы, указав имя класса вручную, добавив :class_name => 'ProfileTags' к объявлениям has_many.

Смежные вопросы