2014-11-04 28 views
0

如何在保存主要問題後執行多次插入?如何保存數組值? (多個插入)

表:

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 

這裏是控制器:

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 

這裏是視圖:

<% 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 %> 

這是我的日誌:

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) 

我要救

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) 

請有人可以幫助我嗎?

回答

1

我想你在找什麼是accepts_nested_attributes_for :category_expense_budgets

我相信你的模型ObjFlow有has_many :category_expense_budgets

然後,它應該工作,如果你添加嵌套屬性的接受和格式化你的表單,所以參數哈希得到正確的格式。要做到這一點,我認爲最簡單的方法是一樣的東西:

<% 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 %> 

看這裏,如果你想:http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

+0

謝謝,我會調查這個話題感謝幫助將再次詢問是否有更多的信息=) – 2014-11-06 17:08:01

+0

我調查了....你的答案接近我想要的,但它幫助我使用嵌套的形式。 – 2014-11-10 20:27:45

+0

+1給我關於如何解決這個問題的想法,注意我編輯了你的答案,這是正確的。 =) – 2014-11-10 20:28:05