У меня есть приложение, в котором мне нужно сделать простой ввод данных и обновить две модели с одним значением. Я исследовал это уже много дней, и настало время получить некоторую помощь. Я использую Rails 4.1. Я остановился на использовании form_for помощника с полями, которые были вложены в него, на основе ответов на многие подобные вопросы. Это охватывает две модели, но мне по-прежнему остается проблема получения значения для каждой модели. Форма имеет только один вход, и мне нужно зафиксировать это значение для обеих моделей. Он работает для обновления одной модели, но обновленное значение не работает для другой модели. Форма очень проста. Я обновляю поле qtydemanded в модели Plan, но мне хотелось бы, чтобы одно и то же значение обновляло поле value в модели диаграммы. Я попытался установить значение => @ product.qtydemanded в модели диаграммы, но это установило поле: значение, равное существующему qtydemanded в модели Plan до обновления. Он не отобразил обновленное значение из формы для модели диаграммы.Как установить одно и то же значение для двух входов для двух моделей в форме 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 обновляется со старым значением qtydemanded из модели Plan.
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