0

How can I do multiple insert after saving the main issue?

Tables:

flow_budgets
  |id|    |proyected_money|
    1         5000

category_expense_budgets 
  |id|   |amount|   |flow_budget_id|   |category_expense_id|
    1      1000           1                     1
    2      2000           1                     1
    3      3000           1                     1
    4      4000           1                     2
    5      5000           1                     2
    6      6000           1                     2

category_expenses
  |id| |name|        |analysis_expense_id|     
    1   Category 1            1
    2   Category 2            1
    3   Category 3            2
    4   Category 4            2

analysis_expenses
  |id| |name|
    1   Analysis 1
    2   Analysis 2

Here is the controller:

 def new_flow
    @analysis_expenses = AnalysisExpense.all
    @obj_flow = FlowBudget.new(params[:obj_flow])
 end

 def create_flow
    obj_flow =  FlowBudget.new(params[:obj_flow])
    obj_flow.save()

    if obj_flow.save()
      @flow_budget_id = FlowBudget.last.id          
      obj_proyected = CategoryExpenseBudget.new          
    end 
 end 

Here is the view:

<% form_for :obj_flow, :url => {:controller=>"flow_budget",:action=>'create_flow'} do |f|%>
  <%= f.text_field :proyected_money %>  

  <% @analysis_expenses.each do |analysis_expense| %>  
     <label><%= analysis_expense.name %></label>
     <%= text_field_tag "proyected_analysis_expenses",{},:name => "proyected_analysis_expense[amount][]", :id => "proyected_analysis_expense_#{analysis_expense.id}" %>

    <table>
      <% analysis_expense.category_expenses.each do |category_expense|%>
      <tr>
        <td><%= category_expense.name %>:</td>
        <td><%= text_field_tag "proyected_category_expenses",{},:name => "proyected_category_expense[name][]", :id => "proyected_category_expense_#{category_expense.id}" %></td>
      </tr>
      <% end %>
    </table> 

  <% end %>
<% end %>

Here is my log:

Processing FlowBudgetController#create_flow (for 127.0.0.1) [POST]
 Parameters: {"proyected_money"=>"8000",
  "proyected_category_expense"=>{"amount"=>["2100", "2500" ],
  "proyected_analysis_expense"=>{"amount"=>["1000", "1100", "1200", "1300" ]}

 INSERT INTO `flow_budgets` (`proyected_money` ) VALUES(8000)

I want to save

INSERT INTO `flow_budgets` (`proyected_money` ) VALUES(8000)
INSERT INTO `category_expense_budgets` (`amount`,'flow_budget_id','category_expense_id' ) VALUES(1000,1,1)
INSERT INTO `category_expense_budgets` (`amount`,'flow_budget_id','category_expense_id' ) VALUES(1100,1,2)
INSERT INTO `category_expense_budgets` (`amount`,'flow_budget_id','category_expense_id' ) VALUES(1200,1,3)
INSERT INTO `category_expense_budgets` (`amount`,'flow_budget_id','category_expense_id' ) VALUES(1300,1,4)

Please somebody can help me?

1 Answer 1

1

I think what you are looking for is accepts_nested_attributes_for :category_expense_budgets

I presume your model ObjFlow has has_many :category_expense_budgets.

Then it should work if you add the acceptance of nested attributes and format your form so the params hash gets the right format. The easiest way to accomplish this i think is something like:

<% form_for @obj_flow, :url => {:controller=>"flow_budget",:action=>'create_flow'} do |f|%>
  <%= f.text_field :proyected_money %>
  <% @analysis_expenses.each do |analysis_expense| %>

     <% f.fields_for analysis_expense do |nested_f| %> # THIS IS A NEW IMPORTANT LINE

       <label><%= analysis_expense.name %></label>
       <%= nested_f.text_field "proyected_analysis_expenses",{},:name => "proyected_analysis_expense[amount][#{analysis_expense.id}]", :id => "proyected_analysis_expense_#{analysis_expense.id}" %>

      <table>
        <% analysis_expense.category_expenses.each do |category_expense|%>
          <tr>
            <td><%= category_expense.name %>:</td>
            <td><%= text_field_tag "proyected_category_expenses",{},:name => "proyected_category_expense[name][#{analysis_expense.id}]", :id => "proyected_category_expense_#{category_expense.id}" %></td>
          </tr>
        <% end %>
      </table> 
    <% end %>

  <% end %>
<% end %>

read more here if you would like: http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

Sign up to request clarification or add additional context in comments.

3 Comments

Thanks I will investigate about this topic thanks for helping will ask again if got more information =)
I investigated ....your answer is near what I want but it helped me using nested form.
+1 for giving me the idea about how to resolve this, notice that I edited your answer that's the correct. =)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.