Ruby on rails 更改列名称Rails

Ruby on rails 更改列名称Rails,ruby-on-rails,database,Ruby On Rails,Database,我有这张桌子: class CreateShoes < ActiveRecord::Migration def change create_table :shoes do |t| t.string :name t.boolean :leather t.integer :season t.timestamps null: false end end end class-CreateShoes

我有这张桌子:

class CreateShoes < ActiveRecord::Migration
  def change
    create_table :shoes do |t|
      t.string :name
      t.boolean :leather
      t.integer :season

      t.timestamps null: false
    end
  end
end
class-CreateShoes
“季节”列应称为“季节id”。我知道我必须按照中的说明编写't.rename:seasure,:seasure\u id',但我没有找到正确的语法。应该是吗

class CreateShoes < ActiveRecord::Migration
  def change
    create_table :shoes do |t|
      t.string :name
      t.boolean :leather
      t.integer :season

      t.timestamps null: false
    end

    change_table :products do |t|
      t.rename :season, :season_id
    end

  end
end
class-CreateShoes

不起作用。我需要在Mac控制台上做什么?谢谢

修复您的迁移并执行以下操作

rake db:rollback db:migrate
或者像这样进行另一次迁移:

rename_column :shoes, :season, :season_id if column_exists?(:shoes, :season) && !column_exists?(:shoes, :season_id)
然后呢

rake db:migrate
在控制台中运行:

$ rails g migration rename_season_to_season_id
现在文件
db/migrate/TIMESTAMP\u rename\u seasure\u to\u seasure\u id.rb
包含以下内容:

class RenameSeasonToSeasonId < ActiveRecord::Migration
  def change
  end
end
类重命名asontoSeasonId
修改如下:

class RenameSeasonToSeasonId < ActiveRecord::Migration
  def change
    rename_column :shoes, :season, :season_id
  end
end
class RenameSeasonColumnNameToShoes < ActiveRecord::Migration
  def change
      rename_column :shoes, :season, :season_id
  end
end
类重命名asontoSeasonId

然后在控制台中运行
$rake db:migrate

如果您打算重命名表中的列,那么示例迁移没有意义:)。。。而不是这个

class CreateShoes < ActiveRecord::Migration
  def change
    create_table :shoes do |t|
      t.string :name
      t.boolean :leather
      t.integer :season

      t.timestamps null: false
    end

    change_table :products do |t|
      t.rename :season, :season_id
    end

  end
end
class-CreateShoes
您只需要进行表更改迁移,如下所示(Rails将负责您的表的回滚):

类重命名SessionColumnInsideshoes
rename
rails中表对象上的方法是有效的方法,正如您在rails源代码中看到的那样


如果您的分支已投入生产,则可能需要通过运行以下命令添加新的迁移:

rails g迁移重命名asoncolumnnamethoes

如果尚未投入生产,或者您当前仅需对分支机构进行更改,则执行以下操作:

bundle exec rake db:rollback

然后在
/db/migrate/

然后在迁移文件中,使用
rename\u列
执行以下操作:

class RenameSeasonToSeasonId < ActiveRecord::Migration
  def change
    rename_column :shoes, :season, :season_id
  end
end
class RenameSeasonColumnNameToShoes < ActiveRecord::Migration
  def change
      rename_column :shoes, :season, :season_id
  end
end
类重命名asoncolumnnamethoes
然后呢


bundle exec rake db:migrate db:test:prepare

为什么要在同一次迁移中重命名它?回滚并在
create_表
中修复它,或者创建新的迁移。你也可以只写
rename\u列:shoes,:seasure,:seasure\u id
,而不是把它放在一个块中。我不知道我在做什么。学习:)忘记添加表中有数据。创建新迁移意味着新的“def更改”?thxIt意味着一种新的迁移,它有自己的
change
方法。