如何在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 }
这样你就可以检索一个带有true
和false
的数组,知道哪个成功了,哪个没有成功。
你的例子几乎是正确的。
使用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
。