Per*_*ere 22 database ruby-on-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
Run Code Online (Sandbox Code Playgroud)
'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
Run Code Online (Sandbox Code Playgroud)
不行.我在Mac控制台中需要做什么?谢谢!
Inp*_*ego 62
在您的控制台中运行:
$ rails g migration rename_season_to_season_id
Run Code Online (Sandbox Code Playgroud)
现在文件db/migrate/TIMESTAMP_rename_season_to_season_id.rb包含以下内容
class RenameSeasonToSeasonId < ActiveRecord::Migration
def change
end
end
Run Code Online (Sandbox Code Playgroud)
修改如下:
class RenameSeasonToSeasonId < ActiveRecord::Migration
def change
rename_column :shoes, :season, :season_id
end
end
Run Code Online (Sandbox Code Playgroud)
然后$ rake db:migrate在控制台中运行.
要么修复你的迁移并执行
rake db:rollback db:migrate
Run Code Online (Sandbox Code Playgroud)
或者像这样进行另一次迁移:
rename_column :shoes, :season, :season_id if column_exists?(:shoes, :season) && !column_exists?(:shoes, :season_id)
Run Code Online (Sandbox Code Playgroud)
然后做
rake db:migrate
Run Code Online (Sandbox Code Playgroud)