我有一个有一个结果的pickem 对象。我在将结果正确保存到数据库时遇到问题。
pickems_controller.rb
def results
@pickem = Pickem.find params[:id]
# @pickem.result = @pickem.build_result if @pickem.result.blank?
@pickem.result = Result.new
end
def update_results
@pickem = Pickem.find params[:id]
@pickem.result = Result.new params[:pickem][:result_attributes]
if @pickem.result.update_attributes params[:pickem][:result_attributes]
redirect_to edit_pickem_results_path(@pickem), :notice => 'The results have been successfully updated.'
else
render "edit"
end
end
结果.html.erb
<%= simple_form_for @pickem, :url => edit_pickem_results_path(@pickem), :method => :put, do |f| %>
<%= f.simple_fields_for :result do |r| %>
<%= r.input :first_name %>
...
<% end %>
<%= f.submit :class => 'btn btn-success', :label => 'Submit Results' %>
<% end %>
皮克姆.rb
has_one :result, :dependent => :destroy
accepts_nested_attributes_for :result
结果.rb
belongs_to :pickem
我最初使用的是在控制器中注释掉但不得不退出的 build_result 代码。使用 build_result,结果记录会在有人点击结果表单的瞬间保存到数据库中。如果输入了结果,应用程序中有一些规则不允许用户进行任何选择。因此,即使用户点击了结果表单但没有提交,结果仍在创建中。
如何构建表单并仅在用户单击保存时才保存结果记录,而不是在加载表单时?我在上面粘贴的当前解决方案不起作用。它使用适当的外键保存结果记录,但从不获取表单数据。如果我转储@pickem.result 正确的表单数据在结果对象中,我就无法正确保存它。我尝试过正确保存表单数据但外键为 0 的其他解决方案。
编辑:无论出于何种原因@pickem.result = Result.new
仍在将记录保存到数据库中,所以我将其更改为@result = Result.new
并更新表格如下:
<%= simple_form_for @result, :url => edit_pickem_results_path(@pickem), :method => :put, do |r| %>
<%= r.input :first_name %>
<%= r.submit :class => 'btn btn-success', :label => 'Submit Results' %>
<% end %>
然后使用 Chuck W of 的建议@result = @pickem.result.build params[:result]
,我得到undefined method
了 nil:NilClass` 的 build'。