J'ai une table de produits et je veux ajouter une colonne:
t.references :imageable, :polymorphic => true
J'essayais de générer une migration pour cela en faisant:
$ Rails generate migration AddImageableToProducts imageable:references:polymorphic
mais je le fais évidemment mal. Quelqu'un peut-il faire une suggestion? Merci
Lorsque j'essaie de l'insérer manuellement après avoir généré la migration, je l'ai fait comme suit:
class AddImageableToProducts < ActiveRecord::Migration
def self.up
add_column :products, :imageable, :references, :polymorphic => true
end
def self.down
remove_column :products, :imageable
end
end
et ça n'a toujours pas marché
Autant que je sache, il n'y a pas de générateur intégré pour les associations polymorphes. Générez une migration vierge puis modifiez-la manuellement en fonction de vos besoins.
Mise à jour : Vous devrez spécifier la table que vous modifiez. Selon this SO answer :
class AddImageableToProducts < ActiveRecord::Migration
def up
change_table :products do |t|
t.references :imageable, polymorphic: true
end
end
def down
change_table :products do |t|
t.remove_references :imageable, polymorphic: true
end
end
end
Ce que vous essayez de faire n’est pas encore implémenté dans la version stable de Rails; la réponse de Brandon est donc la bonne pour le moment. Mais cette fonctionnalité sera implémentée dans Rails 4 et est déjà disponible dans la version Edge comme suit (selon ceci CHANGELOG ):
$ Rails generate migration AddImageableToProducts imageable:references{polymorphic}
Vous pouvez également faire ce qui suit:
class AddImageableToProducts < ActiveRecord::Migration
def change
add_reference :products, :imageable, polymorphic: true, index: true
end
end
Tu peux essayer Rails generate migration AddImageableToProducts imageable:references{polymorphic}