2012-08-09 77 views
1

在我的Contract表單中,我允許用戶從下拉框中選擇Unit,或者從一組複選框中選擇多個單元。下拉字段的名稱爲unit_id,多個複選框的名稱爲multi_unit_ids[]。 (因爲這兩個選項都在頁面上,所以我不能使用相同的名稱)。Rails使用一個字段創建多個記錄

每個單位選擇一個合約。因此,如果只選擇1個單位,那麼只有一個Contractunit_id一起創建。但是,在選擇多個單元時,所創建的每個Contract的所有數據都是相同的,但每個數據都有自己的單元ID(從multi_unit_ids數組中提取)。

下面是代碼在我的我contracts_controller.rbcreate方法:

# Multiple Units? Multiple Contracts 
if params[:multi_unit_id] 
    unit_arr = params[:multi_unit_id] 
else 
    unit_arr = [*params[:contract][:unit_id]] 
end 


# Loop through units 
unit_arr.each do |unit_id| 
    # Assign the unit id to the params for easy creation 
    params[:contract][:unit_id] = unit_id 

    @contract = Contract.new(params[:contract]) 
    # ... other code here 
    @contract.save 
end 

這一切似乎都那麼亂了!有什麼更好的方法來做到這一點?

回答

1

那麼我不能提出太多的建議,只要創建這些數據庫條目沒有循環去。我不確定這是否有可能,並且真正的循環似乎不夠複雜,除非您忽略了# ... other code here部分的內容。

事實上,我即將提出的建議可能會讓你感覺代碼更加混亂。

如果您打算創建大量的數據庫行,它很可能是一個好主意來包裝循環中的ActiveRecord::Base.transaction類似於:

# Loop through units 
ActiveRecord::Base.transaction do 
    unit_arr.each do |unit_id| 
    # Assign the unit id to the params for easy creation 
    params[:contract][:unit_id] = unit_id 

    @contract = Contract.new(params[:contract]) 
    # ... other code here 
    @contract.save 
    end 
end 

或者以其他方式使用相結合創造的一些其他手段轉換爲單個查詢(還有其他選項和基準,可在http://www.coffeepowered.net/2009/01/23/mass-inserting-data-in-rails-without-killing-your-performance/處獲得)。但是,就重構而言,我不能在這裏提供很多東西。

+0

感謝您的關注。這是我的困境的一部分,多個數據庫插入。我一定會執行這些交易。謝謝! – 2012-08-10 00:13:24

相關問題