Я потратил половину рабочего дня, пытаясь отследить это в AR. С учетом настройки модели, например:
class Publication < ActiveRecord::Base
has_many :subscriptions
end
class Subscription < ActiveRecord::Base
belongs_to :publication
belongs_to :user
end
В контроллере,
@new_subscription = publication.subscriptions.create( user: @current_user ) { |r| ... }
Отлично работает в режиме разработки при первом запуске после запуска сервера. Второй раз, однако, выдает ошибку от
~/.rvm/gems/ruby-1.9.1-p378/gems/activerecord-2.3.8/lib/active_record/base.rb:2906:in `block in assign_attributes':
ActiveRecord::UnknownAttributeError: unknown attribute: user
Настройка
config.cache_classes = true
в config/environments/development.cfg
устраняет проблему.
Где AR обрабатывает создание attr_accessor
/ writer для belongs_to
ассоциации, и почему это сработало в первый, а не во второй раз? Похоже, метод доступа не определяется, когда класс выгружается и перезагружается между запросами? Дополнительная информация: Publication
и Subscription
используют STI, и ассоциации определены в базовых классах, если это не должно иметь никакого значения. Это ruby 1.9.1 и Rails / AR 2.3.8
Благодарен за любые подсказки.