How would I save multiple records at once in Rails?

I am not sure about rails < 4.2 but I have tried it in rails 4.2 you can simply do this

TaxRate.create(tax_rt)

If you want all of them to be saved .or, non of them to be saved even if one fails, you can use 'ActiveRecord::Base.transaction'

e.g.

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

Your example is almost correct.

Use ActiveRecord::Persistence#create, which can accept an array of hashes as a parameter.

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

A nice solution is to use the active record import gem. I recommend it over now built-in Rails bulk insert because it's more flexible in the options in case of constraint violation.

TaxRate.import(
  [:income_from, :income_to, :start, :finish, :rate, :premium],
  tax_rates
)

Its definitely better than my old answer which would trigger a db commit per entry in the array :)


Old answer:

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

This way you'll retrieve an Array with true or false to know which did succeed and which didn't.