为什么ActiveRecord不能将对象分配给关联属性?

时间:2010-09-26 02:24:58

标签: ruby-on-rails activerecord associations

我花了半个工作日试图在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 /编写器的位置,为什么第一次调用而不是第二次调用?似乎在卸载并在请求之间重新加载类时未定义访问器?更多信息:PublicationSubscription正在使用STI,如果不应该有任何区别,则在基类上定义关联。这是ruby 1.9.1和Rails / AR 2.3.8

感谢任何线索。

2 个答案:

答案 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模式运行此修补程序。