J'ai donc un create_table comme celui-ci pour les cours dans une école:
create_table :courses do |t|
t.string :name
t.references :course
t.timestamps
end
mais je veux qu'il fasse référence à deux autres cours comme:
has_many :transferrable_as # A Course
has_many :same_as # Another Course
Puis-je dire ce qui suit?
t.references :transferrable_as, :as=> :course
ruby-on-rails
associations
migration
le miroir
la source
la source
foreign_key
option dans la création de table de cette manière, cela soulève une erreur disant que la table même que je crée n'existe pas ... Donc je soupçonne qu'elle n'est pas vraiment prise en charge par l'API officielle.index
est déjà ajouté aux clés étrangères à partir de Rails stackoverflow.com/questions/39769981/...Vous pouvez le faire de cette façon:
ou en utilisant
t.belongs_to
comme alias pourt.references
Vous ne pouvez pas ajouter
foreign_key: true
à ces deux lignes de références. Si vous souhaitez les marquer comme clés étrangères au niveau de la base de données, vous devez effectuer une migration avec ceci:Mettre à jour
Dans Rails 5.1 et plus, vous pouvez ajouter la clé étrangère dans la migration dans le
create_table
bloc comme ceci:la source
foreign_key: true
aux lignes de références était ce qui me faisait trébucher. L'ajoutadd_foreign_key
et la spécification du nom de colonne pour ceux-ci ont fait l'affaire.schema_plus
gemme. Les documents add_reference de Rails ne mentionnent pas les options a: references.references:
sert l' option (par opposition àt.references
cela ne serait-il pas seulement pertinent au niveau du modèle, les considérations Foreign_key étant prises en charge paradd_foreign_key
?t.references
dit "ajoutez un champ à cette table qui est la clé primaire d'une autre table." L'references:
option lui indique de quelle table il s'agit d'une clé primaire (nécessaire si le nom du champ n'est pas clair). Laadd_foreign_key
fonction indique à la base de données d'appliquer l'intégrité référentielle ici.add_foreign_key
lignes se chargent d'informer la base de données de ce qu'est une clé étrangère de quoi. Lereferences:
paramètre ne fait rien.Je pense que ce fil a une autre manière plus Rails-ish: Scaffolding ActiveRecord: deux colonnes du même type de données
Dans la migration:
la source
PG::UndefinedTable: ERROR
en essayant d'ajouter une contrainte de clé étrangère à une table qui n'existe pas.belongs_to
est juste un alias dereferences
et a donc exactement la même fonctionnalité.Comme réponse supplémentaire à cette question - le modèle doit avoir la ligne suivante pour compléter l'association:
la source
Je ne pense pas
references
accepter l':as
option, mais vous pouvez créer vos colonnes manuellement ...la source