我有一个应用程序,我需要采用简单的用户输入并使用一个值更新两个模型。我已经研究了这么多天,现在是时候得到一些帮助了。我正在使用Rails 4.1。我根据许多类似问题的答案,决定使用一个form_for帮助器,其中嵌入了fields_for。这涵盖了两个模型,但我仍然面临着为每个模型获取正确值的问题。表单只有一个输入,我需要为两个模型捕获该值。它适用于更新一个模型,但更新后的值不适用于其他模型。表格非常简单。我正在更新计划模型上的:qtydemanded字段,但我想要更新图表模型上的:value字段的相同值。我试着设置value =>图表模型上的@ product.qtydeeded,但是在更新之前将:value字段设置为等于Plan模型中的现有qtydeeded。它没有从图表模型的表单中捕获更新的值。
<%= form_for @product, url: update_plan_path do |p| %>
<table>
<tr>
<td>Sku Number:</td>
<td><%= p.text_field :sku_number, :readonly => true %></td>
</tr>
<tr>
<td>Period:</td>
<td><%= p.text_field :period, :readonly => true %></td>
</tr>
<tr>
<td>Qtydemanded:</td>
<td><%= p.text_field :qtydemanded %></td>
<%=fields_for @chart do |chart| %>
<td><%= chart.hidden_field :value %></td>
<% end %>
</tr>
<tr>
<td><%= p.submit "Save" %></td>
</tr>
</table>
<% end %>
控制器也很简单。我没有做任何超级复杂的事情。我只是在强大的参数上调用update_attributes。更新正在进行中。它只是没有正确的值。当我提交表单时,Chart:value字段将使用Plan模型中的旧qtydemanded值进行更新。
def update_plan
@product = Plan.where('sku_number = ? and period = ?', params[:sku_number],params[:period]).first
@chart = Chart.where('sku_number = ? and period = ? and feature = "qtydemanded"',params[:sku_number],params[:period]).first
if @product.update_attributes(plan_params)
@chart.update_attributes(chart_params)
redirect_to(:action => 'show_product', :sku_number => @product.sku_number)
else
puts "There is an error"
end
end
private
def chart_params
params.require(:chart).permit(:value)
end
路由也很简单,因为它只是将sku_number和句点传递给控制器以找到正确的记录。
patch 'products/:sku_number/:period/update_plan' => 'products#update_plan', :as => :update_plan
我可以看到表单正在被正确解释,并且它将输入值放在像我这样的数组中,例如plan [qtydemanded]和chart [value]。我试图在控制器中抓住这个值,如下所示:@ chart.update(:value =&gt; plan [qtydemanded])。返回:值为null。我认为答案很接近,但我无法弄清楚。我已经尝试了其他答案的无数变化,我的想法也没有。我真诚地感谢任何帮助。
答案 0 :(得分:0)
确实
if @product.update_attributes(plan_params)
chart_params[:value] = plan_params[:qtydemanded]
@chart.update_attributes(chart_params)
解决您的问题?