2015-02-10 2 views
0

У меня есть приложение, в котором мне нужно сделать простой ввод данных и обновить две модели с одним значением. Я исследовал это уже много дней, и настало время получить некоторую помощь. Я использую 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. Я думаю, что ответ близок к этому, но я не могу понять. Я пробовал бесчисленные вариации других ответов, и я не в курсе. Я искренне ценю любую помощь.

ответ

0

ли

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

решить проблему?

+0

Этот конкретный ответ работал не так, как показано на рисунке, но, похоже, он должен быть. Тем не менее, это поставило меня в правильном направлении. Что в конечном итоге работает @ chart.update (: value => plan_params [: qtydemanded]. Спасибо за вашу помощь. Я удовлетворен тем, что вы ответили правильно. Я не совсем уверен, почему это не получилось именно так, как вы показали это. – attentionjay

Смежные вопросы