Rails的accept_nested_attributes_for与has_one关联问题有关

时间:2015-08-06 21:04:23

标签: 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_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。我知道如果关联设置正确,我应该可以做到这一点,但我无法弄清楚为什么不是。

有什么想法吗?

3 个答案:

答案 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访问嵌套结构。