gpt4 book ai didi

ruby-on-rails - 两个模型相互接受嵌套属性,生成堆栈级别太深

转载 作者:数据小太阳 更新时间:2023-10-29 07:32:23 37 4
gpt4 key购买 nike

我想知道是否只有我一个人有这个问题。为了查明这一点,我创建了两个非常基本的模型。

# 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 控制台中,尝试更新 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!

如果我删除 其中一个 accepts_nested_attributes 指令,这个问题就会消失。我想这里最简单的答案是“那么,你为什么不摆脱其中一个呢?”问题是这将涉及重写应用程序中的许多现有页面,如果有不同的修复或解决方法,我想听听。

最佳答案

在设计方面,角色“有一个”用户并不是正确的组合。在此阶段更正设计可能比离开它更好。

这两种关系也被定义为“相反”的关系;这也可能导致无限递归。

关于ruby-on-rails - 两个模型相互接受嵌套属性,生成堆栈级别太深,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16496777/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com