我有一個應用程序,我需要簡單的用戶輸入並使用一個值更新兩個模型。我一直在研究這麼多天,現在是時候得到一些幫助。我正在使用Rails 4.1。基於對許多類似問題的回答,我決定使用一個form_for helper和一個嵌套在其中的fields_for。這涵蓋了兩個模型,但我仍然留下了爲每個模型獲得正確值的問題。表單只有一個輸入,我需要爲這兩個模型捕獲該值。它適用於更新一個模型,但更新後的值不適用於其他模型。表格非常簡單。我正在更新Plan模型中的:qtydemanded字段,但我希望使用相同的值來更新Chart模型中的:value字段。我嘗試在Chart模型上設置value => @ product.qtydemanded,但在更新之前將:value字段設置爲等於Plan模型中現有的qtydemanded。它沒有從Chart模型的表單中捕獲更新後的值。如何爲Rails表格中的兩個模型設置兩個輸入的相同值
<%= 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
我可以看到,窗體被正確解釋,它是把輸入值成什麼我看來像陣列如計劃[qtydemanded]和圖表[值]。我試圖在控制器中獲取這樣的值:@ chart.update(:value => plan [qtydemanded])。返回值:值爲null。我認爲答案就是這樣,但我無法弄清楚。我已經嘗試了其他答案的無數變化,我沒有想法。我衷心感謝任何幫助。
這個特定的答案沒有像所顯示的那樣工作,但我看起來應該有。不過,它讓我朝着正確的方向前進。最後工作的結果是@ chart.update(:value => plan_params [:qtydemanded]。謝謝你的幫助。我很滿意你正確回答了這個問題。我不太清楚爲什麼它不能像你一樣工作已經顯示它。 – attentionjay 2015-02-11 02:01:46