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
方法。