如何为Rails表单中的两个模型的两个输入设置相同的值

时间:2015-02-10 04:44:52

标签: ruby-on-rails

我有一个应用程序,我需要采用简单的用户输入并使用一个值更新两个模型。我已经研究了这么多天,现在是时候得到一些帮助了。我正在使用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。我认为答案很接近,但我无法弄清楚。我已经尝试了其他答案的无数变化,我的想法也没有。我真诚地感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

确实

if @product.update_attributes(plan_params)
  chart_params[:value] = plan_params[:qtydemanded]
  @chart.update_attributes(chart_params)

解决您的问题?