【问题标题】:How can I change the a column name in rails 3?如何更改 rails 3 中的列名?
【发布时间】:2013-05-27 21:34:23
【问题描述】:

基本上我不小心写了 password_has 而不是 password_hash 我认为通过 rake db:rollback 我可以进行适当的更改,然后执行 rake db:migrate 和 rake db:reset 但似乎更改没有在 mysql 中发生。我保持出现错误..我该怎么办?理想情况下,我想销毁数据库并重新启动它,但它不会破坏它,因为当我这样做并尝试重新创建它时,它说它仍然已经创建了一个副本。我在这里发疯了,请帮助我新手!

【问题讨论】:

  • rake db:rollback 仅回滚 1 次上次迁移。显示你的 rake db:migrate --trace
  • 给你:new-host-3:shop_app vickenvartanian$ rake db:migrate --trace ** 调用 db:migrate (first_time) ** 调用环境 (first_time) ** 执行环境 **调用 db:load_config (first_time) ** 执行 db:load_config ** 执行 db:migrate ** 调用 db:_dump (first_time) ** 执行 db:_dump ** 调用 db:schema:dump (first_time) ** 调用环境 * * 调用 db:load_config ** 执行 db:schema:dump

标签: ruby-on-rails database model-view-controller


【解决方案1】:

您可以编写重命名迁移。将其生成为:

rails g migration RenameColumn

接下来,在生成的迁移文件中应用以下代码来重命名列:

 class RenameColumn < ActiveRecord::Migration
  def self.up
    rename_column :table_name, :old_column, :new_column
  end

  def self.down
    # rename back if you need
  end
end

迁移运行后,请避免回滚以进行修改。写一个新的来代替。

如果rake db:migrate 出现错误,请尝试只运行您需要的那个:

rake db:migrate:up VERSION=20130405061213

只需替换正确的版本(它在您的迁移文件名中)。x

【讨论】:

  • 生成的迁移文件是什么意思?请说清楚,生成的迁移文件有哪些?
  • 当您运行命令rails g migration时,会在您的应用程序的db/migrate目录中生成一个迁移文件。正是这个文件在执行rake db:migrate 时运行
【解决方案2】:

我认为您不必一开始就返回,只需进行新的迁移更改列名称即可。 如果您指定了错误消息也会很有帮助。

【讨论】:

    【解决方案3】:

    例如可以执行如下sql:

    ALTER TABLE table_name CHANGE prev_column_name new_column_name INTEGER;
    

    【讨论】:

    • 如果您直接在数据库中输入 SQL 而不编写迁移,则使用该应用程序的其他任何人都不会更改数据库
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    相关资源
    最近更新 更多