ruby-on-rails - rails联合索引 - ruby rails介绍




如何在Ruby on Rails迁移中重命名数据库列? (16)

IMO,在这种情况下,更好地使用rake db:rollback 。 然后编辑您的迁移并再次输入rake db:migrate 。 但是,如果列中的数据不想丢失,请使用rename_column

我错误地命名了hased_password列而不是hashed_password

如何更新数据库模式,使用迁移来重命名此列?


Rails 5迁移改变

例如:

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

如果您想要将student_name列更改为名称

注意: - 如果你没有运行rails db:migrate

您可以执行以下步骤

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

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

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

如果你迁移了(rails db:migrate),下面的选项可以更改列名

rails g migration RemoveStudentNameFromStudent student_name:string

rails g迁移AddNameToStudent name:string


更新 - create_table的近亲是change_table,用于更改现有表。 它以与create_table类似的方式使用,但向该块输出的对象知道更多技巧。 例如:

class ChangeBadColumnNames < ActiveRecord::Migration
  def change
    change_table :your_table_name do |t|
      t.rename :old_column_name, :new_column_name
    end
  end
end

这种方式更有效率,如果我们使用其他更改方法,如:删除/添加索引/删除索引/添加列,例如我们可以做更进一步的:

# Rename
t.rename :old_column_name, :new_column_name
# Add column
t.string :new_column
# Remove column
t.remove :removing_column
# Index column
t.index :indexing_column
#...

生成Ruby on Rails迁移

$:> rails g migration Fixcolumnname

在迁移文件(XXXXXfixcolumnname.rb)中插入代码

class Fixcolumnname < ActiveRecord::Migration
  def change
    rename_column :table_name, :old_column, :new_column
  end
end

从API:

rename_column(table_name, column_name, new_column_name)

它重新命名一列,但保持类型和内容保持不变。


作为一种替代方案,如果您没有结合迁移的想法,ActiveRecord会有一个令人信服的gem,它将自动为您处理名称更改Datamapper样式。 你所做的只是改变模型中的列名(并确保你将Model.auto_upgrade!放在你的model.rb的底部)和中提琴! 数据库即时更新。

https://github.com/DAddYE/mini_record

注意:您需要核实db / schema.rb以防止冲突

仍然处于测试阶段,显然不适合每个人,但仍然是一个引人注目的选择(我目前在两个不重要的生产应用程序中使用它,没有任何问题)


只需使用命令生成迁移

rails g migration rename_hased_password

之后编辑迁移添加以下行中的更改方法

rename_column :table, :hased_password, :hashed_password

这应该做的伎俩。


只需创建一个新的迁移,并在一个块中使用rename_column ,如下所示。

rename_column :your_table_name, :hased_password, :hashed_password

如果当前数据对您不重要,则可以使用以下命令取消原始迁移:

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

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

rake db:migrate

如果您需要切换列名称,则需要创建一个占位符以避免重复的列名错误 。 这是一个例子:

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

对于Ruby on Rails 4:

def change
    rename_column :table_name, :column_name_old, :column_name_new
end

手动我们可以使用下面的方法:

我们可以手动编辑迁移,如下所示:

  • 打开app/db/migrate/xxxxxxxxx_migration_file.rb

  • hased_password更新为hashed_password

  • 运行以下命令

    $> rake db:migrate:down VERSION=xxxxxxxxx
    

然后它会删除你的迁移:

$> rake db:migrate:up VERSION=xxxxxxxxx

它将添加您的迁移与更新的更改。


某些版本的Ruby on Rails支持向上/向下的迁移方法,如果您在迁移过程中有up / down方法,则:

def up
    rename_column :table_name, :column_old_name, :column_new_name
end

def down
    rename_column :table_name, :column_new_name, :column_old_name
end

如果您在迁移中使用change方法,则:

def change
    rename_column :table_name, :column_old_name, :column_new_name
end

有关更多信息,您可以移动: Ruby on Rails - 迁移活动记录迁移


运行rails g migration ChangesNameInUsers (或任何你想命名它)

打开刚刚生成的迁移文件,并在方法中添加此行(在def changeend之间):

rename_column :table_name, :the_name_you_want_to_change, :the_new_name

保存该文件,然后在控制台中运行rake db:migrate

检查你的schema.db以查看数据库中名称是否已经真正改变!

希望这可以帮助 :)


 def change
    rename_column :table_name, :old_column_name, :new_column_name
  end

$:  rails g migration RenameHashedPasswordColumn
invoke  active_record
      create    db/migrate/20160323054656_rename_hashed_password_column.rb

打开该迁移文件并修改该文件(请输入您的原始表名)

class  RenameHashedPasswordColumn < ActiveRecord::Migration
  def change
    rename_column :table_name, :hased_password, :hashed_password
  end
end






migration