J'ai une table Produits et je souhaite 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'essaye de le mettre manuellement après avoir généré la migration, je l'ai fait comme ceci:
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é
ruby-on-rails
polymorphic-associations
rails-migrations
chemin de fer
la source
la source
Réponses:
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 cette réponse SO :
la source
schema.rb
devrait être mis à jour, mais cela ne dira rienpolymorphic
. Au lieu de cela, vous devriez voir les champs réels utilisés par Rails (les guides Rails ont plus d'informations).references
colonne? Dois-je l'indexer?imageable_type
et / ouimageable_id
si nécessaire.imageable_id
etimageable_type
travaillé. Merci de votre aide.Ce que vous essayez de faire n'est pas encore implémenté dans la version stable des rails, la réponse de Michelle est donc la bonne pour le moment. Mais cette fonctionnalité sera implémentée dans les rails 4 et est déjà disponible dans la version bord comme suit (selon ce CHANGELOG ):
la source
add_reference :products, :imageable, polymorphic: true, index: true
{polymorphic}
doit être échappé avec la coquille de poisson, par exemple\{polymorphic\}
Vous pouvez également effectuer les opérations suivantes:
la source
Tu peux essayer
rails generate migration AddImageableToProducts imageable:references{polymorphic}
la source
{
et}
doivent être échappés avec la coquille de poisson au moins, par exemple\{polymorphic\}