“用户”有一个“移动”。我希望用户在“/ user /(:id)/ edit”页面上编辑他们的移动。
这意味着我有一个has_one关系的嵌套表单。如果“move”不存在,则表单的嵌套部分将不会显示。为确保存在,您经常会在控制器中看到@user.build_move
或@user.move.build
。
我的问题是@user.build_move
和@user.move.build
在语义上有什么不同?第一个工作正常,而第二个返回错误undefined method
build'为nil:NilClass`。
以下是示例代码:
在用户#edit view
中<%= form_for @user do |u| %>
<p>Test A</p>
<%= u.fields_for :move do |m| %>
<p>Test B</p>
<%= m.date :start_date %>
<% end %>
<% end %>
在用户#edit controller
中 def edit
@user = User.find(params[:id])
@user.move.build # Causes `undefined method `build' for nil:NilClass`
end
答案 0 :(得分:1)
尝试在您的控制器中执行此操作
def edit
@user = User.find(params[:id])
@user.build_move
end
关联上的 build
仅适用于has_many
关联
例如,如果您的user has many roles
,则可以说
@user.roles.build
但是@user.build_roles
无效