Rails own_to не устанавливает идентификатор внешнего ключа с пользовательским именем класса

Мои модели настроены так:

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

8
задан Heinrich Lee Yu 9 July 2011 в 15:11
поделиться