我想知道是否只有我一个有这个问题。为了确定这一点,我创建了两个非常基本的模型。
# user.rb
class User < ActiveRecord::Base
has_one :role, :inverse_of => :user
accepts_nested_attributes_for :role
end
# role.rb
class Role < ActiveRecord::Base
belongs_to :user, :inverse_of => :role
accepts_nested_attributes_for :user
end
在 Rails 控制台中,如果 User 模型已加载,则尝试更新 Role 类的简单属性会失败。
Loading development environment (Rails 3.2.2)
1.9.3-p194 :001 > Role.first.update_attribute(:role_type, 72)
=> true
1.9.3-p194 :002 > Role.first.tap {|r| r.user}.update_attribute(:role_type, 72)
SystemStackError: stack level too deep
from /Users/enelson/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb/workspace.rb:80
Maybe IRB bug!
如果我删除任何一个accept_nested_attributes 指令,这个问题就会消失。我想这里的简单答案是“那么,你为什么不摆脱其中一个呢?” 问题是这将涉及重写应用程序中的许多现有页面,如果有不同的修复或解决方法,我想听听。