我错误地将列命名为hased_password而不是hashed_password。

如何使用迁移重命名此列来更新数据库架构?


当前回答

首先你需要跑步

rails g migration create_new_column_in_tablename new_column:datatype
rails g migration remove_column_in_tablename old_column:datatype

然后需要检查db/migration您可以检查nem迁移中的详细信息,如果所有详细信息都正确,则需要运行:

rails db:migrate

其他回答

Rails 5迁移更改

eg:

rails g model学生Student_name:字符串年龄:整数

如果要将student_name列更改为name

注意:-如果没有运行railsdb:migrate

您可以执行以下步骤

rails d model学生Student_name:字符串年龄:整数

这将删除生成的迁移文件,现在您可以更正列名

rails g model学生姓名:string年龄:整数

如果已迁移(railsdb:migrate),请使用以下选项更改列名

rails g迁移RemoveStudentNameFromStudent student_name:字符串rails g迁移AddNameToStudent名称:字符串

如果需要切换列名,则需要创建占位符以避免出现“重复列名”错误。下面是一个示例:

class SwitchColumns < ActiveRecord::Migration
  def change
    rename_column :column_name, :x, :holder
    rename_column :column_name, :y, :x
    rename_column :column_name, :holder, :y
  end
end

在我看来,在这种情况下,最好使用rakedb:rollback,然后编辑迁移并再次运行rakedb:migrate。

但是,如果列中有不希望丢失的数据,请使用rename_column。

我在rails 5.2上,试图重命名device User上的列。

rename_column位对我有效,但单数:table_name抛出了“User table not found”错误。Plural为我工作。

rails g RenameAgentinUser

然后将迁移文件更改为:

rename_column :users, :agent?, :agent

哪里:代理人?是旧的列名。

如果当前数据对您不重要,您可以使用以下方法删除原始迁移:

rake db:migrate:down VERSION='YOUR MIGRATION FILE VERSION HERE'

如果没有引号,请在原始迁移中进行更改,然后通过以下方式再次运行升级迁移:

rake db:migrate