2015-06-05 2 views
1

Я хотел бы обновить мою проверку акций каждый день. Итак, у меня есть таблица Ingredient в моей базе данных, также есть IngredietnStockChek, где каждый день я хотел бы сохранить свою проверку акций. Моя идея - создать форму, которая покажет мне количество полей ввода для каждого продукта, который у меня есть, а затем в этой форме я поставлю, сколько у меня есть.Как обновить несколько полей, используя одну форму в рельсах

<%= form_for(@stock_of_ingredient, :multipart => true, html: { class: "form-horizontal", role: "form" }) do |f| %> 
<% @ingredients.each do |b| %> 
<%= fields_for "stock_of_ingredients" do |c| %> 
<div class="form-group"> 
    <%= c.label "#{b.name}", class: "col-sm-2 control-label" %> 
    <div class="col-sm-10"> 
     <%= c.number_field :ingredient_id, class: "form-control", value: "#{b.id}" %> 
    </div> 
    </div> 
    <div class="form-group"> 
    <%= c.label :quantity, class: "col-sm-2 control-label" %> 
    <div class="col-sm-10"> 
     <%= c.text_field :quantity, class: "form-control" %> 
    </div> 
    </div> 
    <div class="form-group"> 
    <%= c.label :todays_date, class: "col-sm-2 control-label" %> 
    <div class="col-sm-10"> 
     <%= c.date_select :todays_date, class: "form-control" %> 
    </div> 
    </div> 
<% end %> 
<% end %> 

Так что это моя форма, я должен использовать

<%= fields_for "stock_of_ingredients" do |c| %>` 

Или я

<%= fields_for "stock_of_ingredients[]" do |c| %> 

Чтобы поймать все данные из всех полей

и как изменить контроллер создания действия чтобы сохранить все, я должен, вероятно, использовать цикл, но как.

def create 


    @stock_of_ingredient = StockOfIngredient.new(stock_of_ingredient_params) 
    respond_to do |format| 
     if @stock_of_ingredient.save 

     format.html { redirect_to @stock_of_ingredient, notice: 'Stock of ingredient was successfully created.' } 
     format.json { render :show, status: :created, location: @stock_of_ingredient } 
     else 
     format.html { render :new } 
     format.json { render json: @stock_of_ingredient.errors, status: :unprocessable_entity } 
     end 
    end 
    end 
+0

Что такое переменная экземпляра "@stock_of_ingredient" установлен в? –

+1

И можете ли вы добавить более подробную информацию о своих ассоциациях, пожалуйста? –

+0

Hi Stock_of_ingredient сохраняет сегодняшнюю дату, идентификатор продукта и количество нет никакой ассоциации – nikos83

ответ

3

Насколько я понимаю, что вы делаете, я думаю, что вы можете использовать fields_for:

<%= form_tag update_my_ingredients_for_a_product_path, method: :put do %> 
    <% @ingredients.each do |b| %> 
    <%= fields_for "ingredients[]", b do |f| %> 
    <div class="form-group"> 
     <%= f.label "#{b.name}", class: "col-sm-2 control-label" %> 
     <div class="col-sm-10"> 
     <%= f.number_field :ingredient_id, class: "form-control", value: "#{b.id}" %> 
     </div> 
    </div> 
    ... 
    <% end %> 
    <%= submit_tag "Save", class: "btn btn-default" %> 
<% end %> 

Documentation for fields_for

Railscast close to your question

+0

Привет, спасибо за повтор, так что я должен на первом месте изменить свой form_tag, а затем добавить fields_for? – nikos83

+0

Привет, вам нужно сделать form_tag конкретным для вашего действия и сделать соответствующий маршрут контроллеру, который позаботится о действии. Этот railscast показывает очень похожее действие, это должно помочь вам поймать, как использовать поля для: http://railscasts.com/episodes/165-edit-multiple-revised –

+0

В вашем контроллере вам необходимо реализовать что-то вроде этого: Ingredient .update (params [: components] .keys, params [: components] .values) для обновления записей. –

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