更改列名称Rails
我有这张桌子:
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
‘season’专栏应该叫’season_id’。 我知道我必须写’t.rename:season,:season_id’,如http://edgeguides.rubyonrails.org/active_record_migrations.html#column-modifiers中所述,但我无法找到正确的语法。 应该是吗?
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
不起作用。 我必须在Mac控制台做什么? 谢谢!
在您的控制台中运行:
$ rails g migration rename_season_to_season_id
现在文件db/migrate/TIMESTAMP_rename_season_to_season_id.rb
包含以下内容:
class RenameSeasonToSeasonId < ActiveRecord::Migration def change end end
修改如下:
class RenameSeasonToSeasonId < ActiveRecord::Migration def change rename_column :shoes, :season, :season_id end end
然后在控制台中运行$ rake db:migrate
。
要么修复迁移,要么修复
rake db:rollback db:migrate
或者像这样进行另一次迁移:
rename_column :shoes, :season, :season_id if column_exists?(:shoes, :season) && !column_exists?(:shoes, :season_id)
然后呢
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
您只需要表更改迁移,就像这样(Rails会为您进行小心回滚):
class RenameSessionColumnInsideShoes < ActiveRecord::Migration def change change_table :products do |t| t.rename :season, :season_id end end end
在rails中的表对象上rename
方法是有效的方法,正如您在Rails源代码中看到的那样