我在接受具有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 %>
我收到以下错误:
undefined method `model_name' for nil:NilClass
我知道这告诉我@ user.shipping_address是零,但我无法弄清楚原因。我也无法做到这一点:
@user.shipping_address.create(address: 'something')
因为@ user.shipping_address是nil。我知道如果关联设置正确,我应该可以做到这一点,但我无法弄清楚为什么不是。
有什么想法吗?
答案 0 :(得分:2)
在渲染表单之前在控制器中构建送货地址对象:
# Your current assignment
@user = User.where(...)
# Add this line:
@user.build_shipping_address
答案 1 :(得分:1)
首先,试试这个:
<%= f.fields_for :shipping_address do |builder| %>
答案 2 :(得分:0)
试试这个
我不知道引擎盖下的所有细节,我这样解释给自己。 您已使用“form_for @user”启动了表单上下文。因此,用户在此上下文中已为人所知。您可以使用:shipping_address访问嵌套结构。