Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 获取字段并接受嵌套的属性以处理归属关系_Ruby On Rails_Ruby_Associations_Nested Attributes - Fatal编程技术网

Ruby on rails 获取字段并接受嵌套的属性以处理归属关系

Ruby on rails 获取字段并接受嵌套的属性以处理归属关系,ruby-on-rails,ruby,associations,nested-attributes,Ruby On Rails,Ruby,Associations,Nested Attributes,我似乎无法在rails视图中使用rails 2.3的新的accepts\u nested\u attributes\u为归属关系生成嵌套表单。我确实查看了很多可用的资源,看起来我的代码应该可以正常工作,但是的fields\u在我身上爆炸了,我怀疑这与我如何配置嵌套模型有关 我遇到的错误是一个常见的错误,可能有许多原因: '@account[owner]' is not allowed as an instance variable name 以下是涉及的两个模型: class Account

我似乎无法在rails视图中使用rails 2.3的新的
accepts\u nested\u attributes\u为
归属关系生成嵌套表单。我确实查看了很多可用的资源,看起来我的代码应该可以正常工作,但是
fields\u在我身上爆炸了,我怀疑这与我如何配置嵌套模型有关

我遇到的错误是一个常见的错误,可能有许多原因:

'@account[owner]' is not allowed as an instance variable name
以下是涉及的两个模型:

class Account < ActiveRecord::Base
  # Relationships
  belongs_to :owner, :class_name => 'User', :foreign_key => 'owner_id'
  accepts_nested_attributes_for :owner
  has_many :users
end

class User < ActiveRecord::Base
  belongs_to :account
end
这是新操作的控制器代码:

class AccountsController < ApplicationController
  # GET /account/new
  def new
    @account  = Account.new
  end
end
@account.build_owner
如果我尝试使用神秘的“构建”方法,它只会在控制器中爆炸,可能是因为构建仅用于多记录关系:

class AccountsController < ApplicationController
  # GET /account/new
  def new
    @account  = Account.new
    @account.owner.build
  end
end

You have a nil object when you didn't expect it!
The error occurred while evaluating nil.build
class AccountsController
如果我尝试在控制器中使用@account.owner\u attributes={}或@account.owner=User.new设置此属性,则返回到原始错误,“@account[owner]不允许作为实例变量名”


其他人是否有新的accepts\u nested\u attributes\u用于处理“属于”关系的方法?你有什么特别或不同的事情要做吗?所有的官方示例和示例代码(如)都与多记录关联有关。

我认为您的
接受嵌套的属性
是错误的。也许像这样的办法行得通

class Account < ActiveRecord::Base
  belongs_to :owner, :class_name => 'User', :foreign_key => 'owner_id'
  has_many :users
end

class User < ActiveRecord::Base
  belongs_to :account
  has_one :account, :foreign_key => :owner_id
  accepts_nested_attributes_for :account
end
类帐户'User',:foreign\u key=>'owner\u id'
有很多:用户
结束
类用户:所有者\u id

接受:帐户的\u嵌套\u属性\u 结束
用于生成要使用build_account的帐户


您可以在中看到更多示例。

我正在使用Rails 2.3.5,我注意到了同样的事情。检查活动\u记录的嵌套\u attributes.rb的源代码,它看起来应该可以正常工作。因此,这可能是一个“嵌套表单”错误

我有一个与您完全相同的嵌套表单,
用户所属:address
,并且
address
独立于用户

然后在表单中,我只做
,而不是
。临时黑客,直到有更好的方法,但这是有效的。
方法接受
的_嵌套的_属性_,希望参数包括以下内容:

{user=>{address\u attributes=>{attr1=>'one',attr2=>'two'},name=>'myname'}

…但是
字段\u正在生成:

{user=>{address=>{attr1=>'one',attr2=>'two'},name=>'myname'}

这样你就不必在你的代码中添加
has_one:account
,这在我的情况下不起作用

更新:找到了更好的答案:

下面是我用来使这项工作正常进行的代码要点:


希望这能有所帮助。

我已经晚了几个月,但我一直在寻找解决这个错误的方法,我的情况是,我无法将这种关系改变为“以另一种方式面对”

答案其实很简单,你必须在新的行动中做到这一点:

class AccountsController < ApplicationController
  # GET /account/new
  def new
    @account  = Account.new
  end
end
@account.build_owner
表单没有使用字段显示的原因是它没有有效的对象。您的想法是正确的:

@account.owner.build
但是,这不是
属于
工作的方式。此方法仅使用
has\u many
has\u和\u belient\u many
生成

参考:
类帐户'User',:外键=>'owner\u id'
结束

这对我来说很有用。:foreign\u key=>“owner\u id”是我这个例子的关键问题。

D'oh!那就可以了。我可能会实际更改它,使帐户有一个:owner,用户属于:owner\u Account或:team或其他什么,并设置外键。接受嵌套的\u属性\u可以位于关系的任意一侧(至少我已经确认了has_one,belishing_to)。我假设a有许多相同的函数。但是构建方法不存在于多态关系中。@Jaryl,工作起来像一个符咒…:)请评论“当编辑时呈现相同的表单,并且具有belishing_to association的嵌套属性时应该做什么。”.@zeal又晚了一个月,但理想情况下,不需要再做任何事情来处理创建和编辑。表单和接受嵌套的属性共同生成表单元素,以便现有记录的id存在,如果不存在,则只生成[].It事件以相同的方式为有多个关联工作,但有一个额外的[]来维护一些索引。需要注意的是,对于强参数,您需要允许所有者属性:[:帐户id,:您的数据],其中外键允许保持关联。显然,这种非常不直观的行为就是这样设计的
class Account < ActiveRecord::Base

    belongs_to :owner  :class_name => 'User', :foreign_key => 'owner_id'
end