Ruby on rails Rails接受的\u嵌套的\u属性\u与\u有一个关联问题

Ruby on rails Rails接受的\u嵌套的\u属性\u与\u有一个关联问题,ruby-on-rails,ruby-on-rails-4,activerecord,Ruby On Rails,Ruby On Rails 4,Activerecord,我在接受具有has_one关系的嵌套属性时遇到问题 以下是我的模型: class User has_one :shipping_address accepts_nested_attributes_for :shipping_address end class ShippingAddress belongs_to :user end 和视图: <%= form_for @user %> <%= f.fields_for @user.shipping_addr

我在接受具有has_one关系的嵌套属性时遇到问题

以下是我的模型:

class User
  has_one :shipping_address

  accepts_nested_attributes_for :shipping_address
end

class ShippingAddress
  belongs_to :user
end
和视图:

<%= form_for @user %>
  <%= f.fields_for @user.shipping_address do |builder| %>
    <%= builder.text_field :address %>
    ....
  <% end %>
  <%= f.submit 'submit' %>
<% end %>
我知道这告诉我@user.shipping_地址为零,但我不知道为什么。我也无法做到这一点:

@user.shipping_address.create(address: 'something')
因为@user.shipping\u地址为零。我知道,如果协会设置正确,我应该能够做到这一点,但我不明白为什么不能


有什么想法吗?

在呈现表单之前,在控制器中构建shipping address对象:

# Your current assignment
@user = User.where(...)
# Add this line:
@user.build_shipping_address
试试这个

不知道引擎盖下的所有细节,我这样向自己解释。
您已经用“form_for@user”启动了一个表单上下文。因此,在这个上下文中,用户是已知的。您可以使用以下地址访问嵌套结构:shipping\u address

对于初学者,请尝试以下方法:

<%= f.fields_for :shipping_address do |builder| %>


这就是你的全部用户。rb?您没有注意到您缺少
接受\u嵌套的\u属性\u用于:发货\u地址
?您是否在强参数中添加了
shipping\u address\u属性
?对不起,这只是对my user.rb的过度简化。我会更新的,但我甚至无法达到提交表格的目的。它不会生成ShippingAddress对象。发布不完整的代码,然后询问人们“有什么想法?”是完全没有用的。使用
有一个
@user。创建配送地址(…)
。没有回答您最初的问题,但确实解决了部分问题;)这正是我所缺少的。非常感谢!谢谢你的帮助!这是返回零,因为我没有像上面的答案建议的那样建立关联。谢谢你的帮助!这是返回零,因为我没有像上面的答案所建议的那样建立关联
<%= f.fields_for :shipping_address do |builder| %>