2013-09-29 7 views
11

मैं इस सरणी को रेल के साथ एक कॉल में कैसे सहेजूं?मैं रेल में एक बार में एकाधिक रिकॉर्ड कैसे सहेजूं?

tax_rates = [{ 
    :income_from => 0 
    :income_to => 18200 
    :start => "01-07-2013" 
    :finish => "30-06-2014" 
    :rate => nil 
    :premium => nil 
    },{ 
    :income_from => 18201 
    :income_to => 37000 
    :start => "01-07-2013" 
    :finish => "30-06-2014" 
    :rate => 0.19 
    :premium => nil 
    },{ 
    :income_from => 18201 
    :income_to => 37000 
    :start => "01-07-2013" 
    :finish => "30-06-2014" 
    :rate => 0.19 
    :premium => nil 
    }] 

क्या मैं बस Rails.create(tax_rates) पर कॉल कर सकता हूं?

इसके अलावा, डुप्लिकेट प्रतीकों को हटाने का कोई तरीका है ताकि वे साफ दिख सकें?

उत्तर

8
tax_rates.map {|tax_rate| TaxRate.new(tax_rate).save } 

यह पता करने के लिए जो सफल होने की थी और ये नही किया जिस तरह से आप true और false साथ एक सरणी पुनः प्राप्त करेंगे।

a = [] 

a << B.new(:name => "c") 
a << B.new(:name => "s") 
a << B.new(:name => "e") 
a << B.new(:name => "t") 

सरणी के साथ एक बार में सभी सहेजा जाता है:

a.each(&:save) 

इस सरणी में प्रत्येक आइटम पर B#save फोन करेगा

+0

कर सकते हैं तो यह उपयोगी है लेकिन क्या अगर मैं अनुक्रमित है भी तरह के बारे में निश्चित नहीं हूँ : { : income_from => 0 .....}, "1": {: income_from => 18201 ...}, "2": {} ...} –

+0

मुझे समाधान मिला है 'इंडेक्स' -> | इंडेक्स, टैक्स_रेट | –

1

यहाँ आपके जैसे एक उदाहरण है।

4

आप उन सभी .or सहेजने के लिए, उनमें से गैर अगर एक विफल रहता है, तो आप उपयोग कर सकते हैं 'ActiveRecord :: Base.transaction'

जैसे भी बचाया जा चाहते हैं

ActiveRecord::Base.transaction do 
    tax_rate.each do |tax_rt| 
     TaxRate.new(tax_rt).save 
    end 
end 
14

आपका उदाहरण लगभग सही है।

उपयोग ActiveRecord::Persistence#create है, जो एक पैरामीटर के रूप में हैश की एक सरणी स्वीकार कर सकते हैं। { "0":

tax_rates = [ 
    { 
    income_from: 0, 
    income_to: 18200, 
    start: "01-07-2013", 
    finish: "30-06-2014", 
    rate: nil, 
    premium: nil, 
    }, 
    { 
    income_from: 18201, 
    income_to: 37000, 
    start: "01-07-2013", 
    finish: "30-06-2014", 
    rate: 0.19, 
    premium: nil, 
    }, 
    # ... 
] 

TaxRate.create(tax_rates) # Or `create!` to raise if validations fail 
+0

यह मेरे लिए काम नहीं कर रहा है। मैं हैश को बचा सकता हूं लेकिन सत्यापन को "!" से अनदेखा किया जाता है या बिना। तुमने ये कैसे किया? – theDrifter

2

मैं रेल < 4.2 लेकिन मैं रेल 4.2 में यह कोशिश की है तो आप बस इस

TaxRate.create(tax_rt) 
संबंधित मुद्दे