Aditya Y
Aditya Y

Reputation: 328

adding multipe new columns in rails migration using block

Is there any better way to add new columns to rails table than this way

class AddColumnsToUsers < ActiveRecord::Migration[5.1]
  def change
    add_column :users, :first_name, :string
    add_column :users, :last_name, :string
    add_column :users, :contact1, :integer
    add_column :users, :contact2, :integer
    add_column :users, :contact3, :decimal
    add_column :users, :contact4, :integer
    add_column :users, :contact5, :integer
    add_column :users, :contact6, :string
    add_column :users, :contact7, :integer
    add_column :users, :contact8, :integer
    add_column :users, :contact9, :integer
  end
end

Can we use change_table method and write these inside a block? instead of repeating the add_column again and again

Upvotes: 0

Views: 431

Answers (2)

ray
ray

Reputation: 5552

If you just want to dry, then you can write in following manner also,

{
  string: [:first_name, :last_name, :contact6],
  integer: [:contact1 ,:contact2 ,:contact4 ,:contact5 ,:contact7 ,:contact8 ,:contact9],
  decimal: [:contact3] 
}.each do |type, columns| 
  columns.each { |col| add_column :users, col, type }
end

Upvotes: 1

Sumanth Madishetty
Sumanth Madishetty

Reputation: 3605

You can add multiple columns to a same table like this

def change
  change_table :users do |t|
    t.string :first_name
    t.string :last_name
  end
end

Upvotes: 4

Related Questions