我需要将我列类型从日期更改为日期时间我正在进行的应用程序。我并不关心数据作为其仍在开发。

如何执行此操作?

2011-03-04 08:36:59
问题评论:

使用哪个版本的 rails 概览

回答:

首先在您的终端︰

rails g migration change_date_format_in_my_table

然后在迁移文件︰

用于绘制围栏 > = 3.2:

class ChangeDateFormatInMyTable < ActiveRecord::Migration
  def up
    change_column :my_table, :my_column, :datetime
  end

  def down
    change_column :my_table, :my_column, :date
  end
end

您说的对,我只是假定是初学者应选择最新的技术可用,但是的当然,不能确定

问题是,标记"ruby-上-轨道-3"

他回答后,标记已被 apneadiving @Sucrenoir 是。

如果您想知道为什么没有change单个方法使用而不是updown的方法,这是因为change方法不支持change_column迁移定义.

这答案是仅有部分是正确的您不能使用内部更改 change_column 甚至在绘制围栏 4 或向下迁移将不工作。无论 rails 的版本,则应使用向上/向。

此外,如果您正在使用 Rails 3 您不必使用updown的方法。您可以只使用change:

class ChangeFormatInMyTable < ActiveRecord::Migration
  def change
    change_column :my_table, :my_column, :my_new_type
  end
end

更改方法只适用于可逆的迁移中。上面的代码将引发 ActiveRecord::IrreversibleMigration 异常。更改方法中应使用只有api.rubyonrails.org/classes/ActiveRecord/Migration/...中的方法。

我正在运行 Rails 4,做这种类型的迁移之前。更改不起作用 !@davekaro 的评论是正确的。

在 Rails 3.2 和滑轨 4,发布的流行的答案有稍微不同的语法。

首先在您的终端︰

$ rails g migration change_date_format_in_my_table

然后在迁移文件︰

class ChangeDateFormatInMyTable < ActiveRecord::Migration
  def up
   change_column :my_table, :my_column, :datetime
  end

  def down
   change_column :my_table, :my_column, :date
  end
end

这应该是正确的答案。

Change_column方法,只是在与日期时间迁移作为一种新型执行它。

change_column(:my_table, :my_column, :my_new_type)

AFAIK,迁移的目的是为了试着改变您关心 (即生产) 的数据进行架构更改时。所以除非不正确,并且因为他确实说过他不关心数据,为什么不只是修改列类型从原始迁移日期转换为日期时间,然后重新运行迁移?(希望你测试:))。

即使您并不关心数据,如果在一个团队工作,并且您希望所做的架构更改传播到所有其他开发人员在您的团队,有可能无法处理有关在开发环境中,使用迁移。

我有看到什么优势让其他的迁移,若要更改某一列使您在此情况下的问题。更改创建列的初始迁移问题是什么?在任一情况下,每个团队成员必须重新运行所有的迁移,以获取新的架构。

如果您使用新的迁移,就可以撤消更改列类型的迁移。如果您要编辑原始,必须回滚编辑并重新迁移运行之后。

这是真正考虑还没有生产数据非常精明地回答。对于那些担心其他团队成员,这是rake db:migrate:reset是。

请输入您的翻译

Change a column type from Date to DateTime during ROR migration

确认取消