【发布时间】:2010-09-26 02:24:57
【问题描述】:
我花了半个工作日试图在 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 在哪里处理为belongs_to 关联创建attr_accessor/writer,为什么这会在第一次而不是第二次调用时起作用?似乎在请求之间卸载和重新加载类时没有定义访问器?更多信息:Publication 和Subscription 正在使用 STI,如果这不应该有任何区别,则在基类上定义关联。这是 ruby 1.9.1 和 Rails/AR 2.3.8
感谢任何线索。
【问题讨论】:
-
是拼写错误吗?
has_many和belongs_to不是符号...应该是has_many :subscriptions... -
是的,抱歉,错字已更正。问题不是由于拼写错误 - 第一个请求之后的行为不同。就好像关联访问器 user= 第二次未定义或未重新定义。我害怕做出解决方法(例如分配 id),因为语法渗透到应用程序中。它应该可以工作。
标签: ruby-on-rails activerecord associations