我有一个应用程序,需要进行简单的用户输入并使用一个值更新两个模型。我已经研究了很多天了,现在是时候寻求帮助了。我正在使用Rails 4.1。我基于对许多类似问题的回答,决定使用form_for辅助程序和嵌套在其中的fields_for。这涵盖了两个模型,但是我仍然面临着为每个模型获取正确值的问题。该表格只有一个输入,我需要为两个模型都获取该值。它适用于更新一个模型,但更新后的值不适用于另一模型。形式很简单。我正在更新Plan模型上的:qtydemanded字段,但是我想要相同的值来更新Chart模型上的:value字段。我试图在Chart模型上设置value => @ product.qtydemanded,但是设置了:值字段等于更新之前计划模型中要求的现有数量。它没有从图表模型的表单中捕获更新的值。
<%= 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 => plan [qtydemanded])。那返回:value为空。我认为答案接近于此,但我无法弄清楚。我尝试了其他答案的无数种形式,但我没有主意。我衷心感谢您的帮助。
做
if @product.update_attributes(plan_params)
chart_params[:value] = plan_params[:qtydemanded]
@chart.update_attributes(chart_params)
解决您的问题?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句