2013-09-29 21 views
11

Railsを使ってこの配列を1回の呼び出しでどのように保存するのですか?複数のレコードを同時にRailsに保存するにはどうすればよいですか?

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)に電話することはできますか?

また、重複しているシンボルを削除する方法はありますか?成功し、どのなかったのかを知るためにあなたがtruefalseで配列を取得します

答えて

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

この方法です。ここで

+0

を行うことができます。これは便利ですが、私はインデックスを持っている場合は、あまりにも同様:{「0」 {0} {1} {{income_from => 18201 ...}、{2}:{} ...} –

+0

私は解決策を得ました。 - > |索引、税率|。 –

1

はあなたのような例である:これは、配列内の各アイテムにB#saveを呼び出します

a.each(&:save) 

a = [] 

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

配列はで一斉に保存されます。

4

あなたは1つが故障した場合でも、あなたは「ActiveRecordの:: Base.transaction」

例えばを使用することができ、それらの非を保存する、それらのすべてが.ORを保存する場合

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

あなたの例はほぼ正しいです。

ActiveRecord::Persistence#createを使用します。これは、ハッシュの配列をパラメータとして受け入れることができます。

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) 
関連する問題