将相同的列名添加到不同的表 - Rails迁移

时间:2014-11-10 06:31:05

标签: ruby-on-rails rails-migrations

我只是想确定这是否可行:

class AddUpdatedById < ActiveRecord::Migration
  def change
    add_column :clients, :updated_by_id, :integer
    add_column :contacts, :updated_by_id, :integer
    add_column :court_agencies, :updated_by_id, :integer
  end
end

这样我就可以保存迁移。因为如果我将逐个迁移它们,我认为这将需要更多时间并且使我的迁移陷入困境。那么,您怎么看?

是否有可能或我应该逐一做同样的事情?

3 个答案:

答案 0 :(得分:7)

是的,你可以,这将是一个群组迁移。如果你想改变很多桌子,你也可以做这样的事情来编写更少的代码。

def change
  tables = [:clients, :contacts, :court_agencies]

  tables.each do |table_name|
    add_column table_name, :updated_by_id, :integer
  end
end

如果您决定回滚此迁移,则会毫无问题地删除列。

答案 1 :(得分:3)

是的,你可以。迁移实际上可以包含无限的命令列表。例如,如果您查询这些ID,则还应在id上添加索引。

这个想法是在同一个迁移中只分组一组引用相同概念的操作,就像在这种情况下一样。

如果您有多项更改,例如创建模型表,新字段和索引,并且这些更改不是同一功能或批处理操作的一部分,而只是创建多个文件。

在这种情况下,目标是添加UpdateById字段。使用单个迁移是有意义的。

答案 2 :(得分:1)

是的,你可以这样做,但通常你想在相同的迁移文件中保留相关的更改

相关问题