使用block在rails迁移中添加多个新列



有没有比更好的方法向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

您可以将多个列添加到同一个表中,如以下

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

如果您只想干燥,那么您也可以按照以下方式编写

{
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

最新更新