У меня настроены мои модели так:
class User < ActiveRecord::Base
has_many :posts, :foreign_key => 'author_id'
end
class Post < ActiveRecord::Base
belongs_to :author, :class_name => 'User'
end
Предполагая, что:
p = Post.first # just any post instance
a = User.first # any user instance
Теперь этот кусок кода действует очень странно
p.author = a
После установки автора атрибут author_id
сообщения должен быть установлен на идентификатор пользователя. Но этого не происходит.
Я пытался использовать модели с belongs_to
, у которых нет параметра class_name
, и все работает как положено.
Теперь, еще одна вещь, которая делает его более странным, это то, что когда я изменяю ассоциацию на belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
, она удивительно работает.
Это ошибка в Rails 3.0.9? Не должен ли параметр внешнего ключа быть ненужным, потому что, как говорят документы, его значением по умолчанию является имя ассоциации, добавленное с _id
.
Также обратите внимание, что даже без :foreign_key => 'author_id'
все остальное, что касается ассоциации, работает должным образом. (Подобно извлечению связанной модели) Единственное, что не работает, это метод установки, не устанавливающий внешний ключ.
Я знаю, что мог бы просто сделать p.author_id = a.id
или просто добавить :foreign_key
params для всех моих ассоциаций с class_name
, но я предпочитаю более элегантный синтаксис p.author = a