如何在Rails中一次保存多条记录?

如何使用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)吗?

另外,有没有办法删除重复的符号,使它们看起来更整洁?

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

这样你就可以检索一个带有truefalse的数组,知道哪个成功了,哪个没有成功。

你的例子几乎是正确的。

使用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 

如果你想要保存所有这些,或者即使一个失败也不保存它们,你可以使用’ActiveRecord :: Base.transaction’

例如

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

我不确定rails <4.2但我在rails 4.2中尝试过它你可以简单地做到这一点

 TaxRate.create(tax_rt) 

这是一个像你的例子:

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

数组一次全部保存:

 a.each(&:save) 

这将在arrays中的每个项目上调用B#save