在rails中保存多个记录,如果某些记录失败则撤消

Avi*_*857 0 ruby-on-rails

我想在rails中一次添加多个记录.

tax_rates.map {|tax_rate| TaxRate.new(tax_rate).save }
Run Code Online (Sandbox Code Playgroud)

但是在这种情况下,有些记录可能会被保存,而有些记录会被拒绝.

如果有些记录失败,谁能解释我如何拒绝所有记录?

提前致谢.

spi*_*ann 5

我会做这样的事情:

TaxRate.transaction do
  tax_rates.map do |tax_rate| 
    raise ActiveRecord::Rollback unless TaxRate.new(tax_rate).save
  end
end
Run Code Online (Sandbox Code Playgroud)

或者出于可读性原因,您可能希望向模型添加新方法:

# in models/tax_rate.rb
def self.create_all(rates)
  transaction do
    rates.map do |rate| 
      raise ActiveRecord::Rollback unless TaxRate.new(rate).save
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

并在控制器中使用它,如下所示:

TaxRate.create_all(tax_rates)
Run Code Online (Sandbox Code Playgroud)