使用块在Rails迁移中添加multipe新列

时间:2018-11-06 07:52:52

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 migration ruby-on-rails-5

是否有比此方法更好的向rails表添加新列的方法

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

我们可以使用change_table方法并将其写在块中吗?而不是一次又一次地重复add_column

2 个答案:

答案 0 :(得分:1)

您可以像这样将多个列添加到同一表中

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

答案 1 :(得分:1)

如果只想晾干,也可以按照以下方式写

{
  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