我花了半个工作日试图在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
关联创建belongs_to
/编写器的位置,为什么第一次调用而不是第二次调用?似乎在卸载并在请求之间重新加载类时未定义访问器?更多信息:Publication
和Subscription
正在使用STI,如果不应该有任何区别,则在基类上定义关联。这是ruby 1.9.1和Rails / AR 2.3.8
感谢任何线索。
答案 0 :(得分:1)
尝试使用nested_attributes。
答案 1 :(得分:0)
啊,“第一次在开发模式下工作”,但不会在后续页面重新加载。可能与灯塔#1339有关:https://rails.lighthouseapp.com/projects/8994/tickets/1339-arbase-should-not-be-nuking-its-children-just-because-it-lost-interest 使用cache_classes = true运行“修复”它,或者以dev模式运行此修补程序。