Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.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 关于接受\u嵌套的\u属性\u的混淆_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 关于接受\u嵌套的\u属性\u的混淆

Ruby on rails 关于接受\u嵌套的\u属性\u的混淆,ruby-on-rails,ruby,Ruby On Rails,Ruby,不知何故,我的印象是,接受的_嵌套_属性_将允许我通过父对象填充子对象: person.update_attributes person_hash 但在实践中,我最终做到了: person.address.update_attributes person_hash[:address] person_hash.delete :address person.update_attributes person_hash 现在,提及仅间接地接受_嵌套的_属性,并且该方法的API文档也相当神秘 1) 有

不知何故,我的印象是,
接受
的_嵌套_属性_将允许我通过父对象填充子对象:

person.update_attributes person_hash
但在实践中,我最终做到了:

person.address.update_attributes person_hash[:address]
person_hash.delete :address
person.update_attributes person_hash
现在,提及仅间接地接受_嵌套的_属性,并且该方法的API文档也相当神秘

1) 有没有人能为我们展示一些基本的用例?我的意思是,我理解它是如何声明的,我对它所带来的区别感到困惑

2) 我填充嵌套对象的方法是rails中的“正确”方法,还是有更“优雅”的方法

谢谢

更新
模型,为了清楚起见

class Person < ActiveRecord::Base
  has_one :address
  accepts_nested_attributes_for :address
end
class-Person
为j更新2
表单声明是这样的

<% fields_for "people", person, :index => person.id do |person_form| %>
  ... 
  <% person_form.fields_for person.address do |address_form| %>
    <%= address_form.text_field :street %>
  <% end %>
  ...
<% end %>
person.id do | person|u form |%>
... 
...

但是它给我的html名称像
人[66][address][street]
,而不是
人[66][address\u attributes][street]
带有
接受嵌套属性的
您可以执行以下操作:

# example from railsapi.com
# view
<% form_for @person, :url => { :action => "create" } do |person_form| %>
   Name: <%= person_form.text_field :name %>
   ...
   <% person_form.fields_for :address do |address_fields| %>
     Street  : <%= address_fields.text_field :street %>
     Zip code: <%= address_fields.text_field :zip_code %>
   <% end %>
<% end %>
您可以使用

@person = Person.create(params)
有关详细信息。我希望有帮助

编辑

我不知道你的情妇为什么会这样:/ 但是使用

#person.address.update_attributes person_hash.delete(:address) OR
person.address.update_attributes person_hash[:address]
person_hash.delete :address

person.update_attributes person_hash

这没有错。正如您所说,只需使用更优雅的代码即可。

事实上,我以同样的方式声明表单,但我得到的参数名称样式为“people[66][address][street]”,而不是“people[66][address\u attributes][street]”,它不应该是
form\u for:people
而不是
fields\u for
?@j。不,我有一个表格声明用于几个“个人”记录。总的来说,在它的某个地方,有人说字段和表单在所有实际用途上都是一样的,只是不创建元素。我有“post”,:id=>“edit\u tips\u form”)do%>包含了所有内容。我尝试了相同的东西:(但至少,现在我明白了它应该如何工作,谢谢:)我更新了我的答案。不幸的是,我不知道为什么
参数会这样:/
#person.address.update_attributes person_hash.delete(:address) OR
person.address.update_attributes person_hash[:address]
person_hash.delete :address

person.update_attributes person_hash