J'ai cette table:
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
la colonne 'saison' devrait s'appeler 'saison_id'. Je sais que je dois écrire 't.rename: season,: season_id' comme expliqué dans http://edgeguides.rubyonrails.org/active_record_migrations.html#column-modifiers mais je ne parviens pas à trouver le bonne syntaxe. Devrait-ce être?
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
Ça ne marche pas Tout ce que je dois faire dans la console Mac? Merci!
Courez dans votre console:
$ Rails g migration rename_season_to_season_id
Maintenant, le fichier db/migrate/TIMESTAMP_rename_season_to_season_id.rb
contient les éléments suivants:
class RenameSeasonToSeasonId < ActiveRecord::Migration
def change
end
end
Modifiez-le comme suit:
class RenameSeasonToSeasonId < ActiveRecord::Migration
def change
rename_column :shoes, :season, :season_id
end
end
Puis lancez $ rake db:migrate
dans la console.
Soit réparer votre migration et faire
rake db:rollback db:migrate
ou faire une autre migration comme ceci:
rename_column :shoes, :season, :season_id if column_exists?(:shoes, :season) && !column_exists?(:shoes, :season_id)
et ensuite faire
rake db:migrate
Si votre intention est de renommer une colonne dans une table, la migration n’a aucun sens:) ... au lieu de cela
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
Vous avez juste besoin d'une migration de changement de table, comme ceci (Rails se chargera de la restauration):
class RenameSessionColumnInsideShoes < ActiveRecord::Migration
def change
change_table :products do |t|
t.rename :season, :season_id
end
end
end
La méthode rename
sur l'objet table dans Rails est une méthode valide, comme vous pouvez le voir dans le code source de Rails