Tag: 迁移

mysql – 如何在使用MySQL的Ruby on Rails迁移中处理太长的索引名称?

我正在尝试添加一个由四个关联表(用户,大学,subject_names,subject_types)的外键创建的唯一索引: add_index :studies, ["user_id", "university_id", \ "subject_name_id", "subject_type_id"], :unique => true MySQL对索引名称的限制会导致迁移停止。这是错误消息: 表’学习’上的索引名’index_studies_on_user_id_and_university_id_and_subject_name_id_and_subject_type_id’太长; 限制是64个字符 我该如何处理?我可以使用别名吗? 使用: add_index :studies, ["user_id", "university_id", \ "subject_name_id", "subject_type_id"], :unique => true, :name => 'my_index' 更多信息在add_index中。 您还可以更改create_table块中列定义中的索引名称(例如,从迁移生成器中获取)。 create_table :studies do |t| t.references :user, index: {:name => "index_my_shorter_name"} end 在PostgreSQL,在默认情况下限制为63个字符。因为索引名称必须是唯一的,所以有一点约定是很好的。我使用(我调整了示例来解释更复杂的构造): def change add_index :studies, [:professor_id, :user_id], name: :idx_study_professor_user end 正常的索引应该是: :index_studies_on_professor_id_and_user_id 逻辑是: index 变 idx

我如何重命名Ruby on Rails迁移中的数据库列?

我错误地命名了一列hased_password而不是hashed_password。 如何更新数据库模式,使用迁移来重命名此列? rename_column :table, :old_column, :new_column 更新: 你可能会想创建一个单独的迁移来做到这一点。(你将会重命名FixColumnName) script/generate migration FixColumnName # creates db/migrate/xxxxxxxxxx_fix_column_name.rb 然后编辑迁移来执行你的意愿。 # db/migrate/xxxxxxxxxx_fix_column_name.rb class FixColumnName < ActiveRecord::Migration def self.up rename_column :table_name, :old_column, :new_column end def self.down # rename back if you need or do something else or do nothing end end Rails 3.1的更新 同时,在up和down方法仍然适用。Rails 3.1接收的change方法是“知道如何迁移数据库并在迁移回滚时将其反转,而不需要编写单独的停用方法” rails g migration FixColumnName class FixColumnName