Les Rails de la migration: t.les références avec un autre nom?
J'ai donc un create_table ce genre de Cours dans une École:
create_table :courses do |t|
t.string :name
t.references :course
t.timestamps
end
mais je veux qu'il référence deux d'autres cours comme:
has_many :transferrable_as # A Course
has_many :same_as # Another Course
Puis-je dire ceci?
t.references :transferrable_as, :as=> :course
Vous devez vous connecter pour publier un commentaire.
Vous pouvez faire tout cela dans la migration initiale/définition de la colonne (au moins actuellement dans les Rails 5):
foreign_key
option dans la création de la table comme ceci façons, il déclenche un message d'erreur indiquant que le très la table je suis de la création n'existe pas... Donc je suppose que c'est pas vraiment soutenu par le fonctionnaire de l'API.index
est déjà ajouté à des clés étrangères comme des Rails stackoverflow.com/questions/39769981/...Vous pouvez le faire de cette façon:
ou à l'aide de
t.belongs_to
comme un alias pourt.references
Vous ne pouvez pas ajouter de
foreign_key: true
à ces deux références lignes. Si vous souhaitez marquer comme clés étrangères au niveau base de données, vous devez avoir une migration avec ceci:Mise à jour
Dans les Rails 5.1 et ci-dessus, vous pouvez ajouter la clé étrangère dans la migration dans le
create_table
bloc comme ceci:foreign_key: true
les références des lignes a été ce qui a été le déclenchement me. L'ajout de laadd_foreign_key
et en spécifiant le nom de la colonne pour ceux qui a fait le tour.schema_plus
gem. Les Rails' add_reference les docs ne pas mentionner a :options de références.references:
option (par opposition àt.references
ne serait-ce pas seulement avoir une incidence sur le niveau du modèle, avec la foreign_key considérations prises en charge paradd_foreign_key
?references:
option informe de la table, c'est une clé primaire de la (nécessaire si on ne sait pas par le nom du champ). Leadd_foreign_key
fonction indique la base de données de l'intégrité référentielle appliquée ici.references: :user
et j'ai roulé en arrière et il a couru de nouveau, sans que, et le schéma regardé la même dans les deux sens.t.belongs_to :vendor
et un fournisseur et un utilisateurreferences:
option serait nécessaire.add_foreign_key
lignes de prendre soin de renseigner la base de données, ce qui est une clé étrangère de ce. Lereferences:
paramètre est de ne rien faire.Je pense que ce thread a un autre plus de Rails-ish sorte:
Échafaudage ActiveRecord: deux colonnes du même type de données
Dans la migration:
PG::UndefinedTable: ERROR
c'est d'essayer d'ajouter une contrainte de clé étrangère d'une table qui n'existe pas.belongs_to
est juste alias pourreferences
et a donc exactement les mêmes fonctionnalités.Comme un réponse à cette question, le Modèle devrait avoir la ligne suivante pour terminer l'association:
Je ne pense pas que
references
accepte la:as
option, mais vous pouvez créer vos colonnes à la main...