Ich habe also eine solche create_table für Kurse an einer Schule:
create_table :courses do |t|
t.string :name
t.references :course
t.timestamps
end
aber ich möchte, dass es sich auf zwei andere Kurse bezieht , wie:
has_many :transferrable_as # A Course
has_many :same_as # Another Course
Kann ich folgendes sagen?
t.references :transferrable_as, :as=> :course
ruby-on-rails
associations
migration
der Spiegel
quelle
quelle
foreign_key
Option in der Tabellenerstellung auf diese Weise spezifiziere , wird ein Fehler ausgegeben, der besagt, dass die von mir erstellte Tabelle nicht vorhanden ist. Ich vermute also, dass sie von der offiziellen API nicht wirklich unterstützt wird.index
Fremdschlüssel bereits ab Rails stackoverflow.com/questions/39769981/…Sie können es so machen:
oder
t.belongs_to
als Alias für verwendent.references
Sie können
foreign_key: true
diesen beiden Referenzzeilen keine hinzufügen . Wenn Sie sie auf Datenbankebene als Fremdschlüssel markieren möchten, müssen Sie Folgendes migrieren:Aktualisieren
In Rails 5.1 und höher können Sie den Fremdschlüssel in der Migration im
create_table
Block wie folgt hinzufügen :quelle
foreign_key: true
ich nicht in der Lage war, zu den Referenzzeilen hinzuzufügen , war das, was mich auslöste. Das Hinzufügenadd_foreign_key
und Angeben des Spaltennamens für diese hat den Trick getan.schema_plus
Edelstein erforderlich . In den add_reference- Dokumenten von Rails werden die Optionen a: reference nicht erwähnt.references:
Option ist (im Gegensatz dazu,t.references
wäre das nicht nur auf Modellebene relevant, da die Überlegungen zu Foreign_key vonadd_foreign_key
?t.references
sagt "füge dieser Tabelle ein Feld hinzu, das der Primärschlüssel einer anderen Tabelle ist." Diereferences:
Option gibt an, für welche Tabelle es sich um einen Primärschlüssel handelt (erforderlich, wenn der Name des Felds nicht klar ist). Dieadd_foreign_key
Funktion weist die Datenbank an, hier die referenzielle Integrität zu erzwingen.add_foreign_key
Zeilen sorgen dafür, dass die Datenbank darüber informiert wird, was ein Fremdschlüssel von was ist. Derreferences:
Parameter macht nichts.Ich denke, dieser Thread hat eine andere, eher Rails-artige Art: Scaffolding ActiveRecord: zwei Spalten desselben Datentyps
In der Migration:
quelle
PG::UndefinedTable: ERROR
angezeigt, dass versucht wird, einer nicht vorhandenen Tabelle eine Fremdschlüsseleinschränkung hinzuzufügen.belongs_to
ist dies nur ein Alias fürreferences
und hat daher genau die gleiche Funktionalität.Als zusätzliche Antwort auf diese Frage sollte das Modell die folgende Zeile enthalten, um die Zuordnung zu vervollständigen:
quelle
Ich glaube nicht, dass
references
die:as
Option akzeptiert wird , aber Sie können Ihre Spalten manuell erstellen ...quelle