Мои модели настроены так:
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
сообщения должен быть установлен на идентификатор пользователя. Но этого не происходит.
Я пробовал использовать модели с own_to
, у которых нет параметра class_name
, и все работает, как ожидалось.
А теперь еще кое-что, что делает это еще более странным, потому что когда я меняю ассоциацию на own_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