Erstellen von foreign key-Einschränkungen in ActiveRecord
Wie erstelle ich Fremdschlüssel in ActiveRecord? Ich habe etwas wie das folgende in meine Modelle:
class Student < ActiveRecord::Base
attr_accessible :name, :level_id
belongs_to :level
end
class Level < ActiveRecord::Base
attr_accessible :number
has_many :students
end
Aber das schema.rb und Entwicklung sqlite3-Datenbank haben keine Angabe foreign key-Einschränkungen wurden von setup mit der level_id Feld. Ist das etwas, was ich manuell tun, abgesehen von ActiveRecord oder Schienen? Hab ' ich verpasst, einen Schritt?
Mit Rails 3.2.8
InformationsquelleAutor at. | 2012-09-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brauchen Sie nicht eine foreign key-Einschränkungen für ActiveRecord korrekt anzeigen der Beziehungen. Sie können Validierungen haben die Rails-app, die die Datenintegrität sicherstellen.
Schienen migration nicht Anbieter Helfer zum erstellen von Fremdschlüsseln. Sie können erstellen Sie Ihre eigenen SQL für die Einschränkung in der migration oder verwenden Sie die Ausländer Gem. Ausländer bieten Hilfsmethoden für die Erstellung von Einschränkungen in der migration:
Leider Nein. Migrationen erstellen von Indizes, aber keine Fremdschlüssel. Aus guides.rubyonrails.org/migrations.html - "Die Referenzen Helfer eigentlich nicht zu schaffen foreign key-Einschränkungen für Sie. Sie benötigen, um ausführen oder ein plugin, das fügt Unterstützung für Fremdschlüssel."
Wie bereits in einer anderen Antwort, als von rails 4.2 und darüber hinaus, es gibt zwar Unterstützung für das hinzufügen von foreign key-Einschränkungen — edgeguides.rubyonrails.org/...
Während der erste Satz ist wahr, es gibt keine Antwort auf die Frage. Viele Entwickler würden Zustimmen, dass ein gut eingeschränkt db-schema ist ebenso wichtig, wenn nicht noch mehr, als sich auf die Anwendung zu verwalten, die Integrität, diese Antwort schreckt gute Datenbank-design-Prinzipien und IMO ist nicht hilfreich.
InformationsquelleAutor mguymon
Wenn Sie rails >= 4.2 und die Verwendung der
mysql
,mysql2
oderpostgresql
adapter, dann kann man dieadd_foreign_key
Methode in der migration wie diese:API-Referenz
InformationsquelleAutor Segfault
Hinzufügen
belong_to
undhas_many
Linien zu Ihren Modellen macht, Schienen Sie sich bewusst mit Ihrer Beziehung und erzeugt helper-Methoden, aber nicht erstellen FKs auf der Datenbank-Ebene. Um das zu tun, müssen Sie erstellen und ausführen einer migration:dann
rake db:migrate
Wenn Sie möchten, erzeugen Sie ein Modell mit der foreign key-Teil, können Sie die
references
Verknüpfung:rails g model Student name:string level:references
Check-out die Rails guides für mehr Informationen!
Die Frage ist zu Fragen, speziell über die Datenbank-Ebene Einschränkungen, die beliebt außerhalb von Rails/ActiveRecord. Während diese Antwort gibt an, was getan wird in Rails/ActiveRecord, ist es nicht.
InformationsquelleAutor claptimes
sollten die machen so etwas
hier http://guides.rubyonrails.org/migrations.html#creating-a-migration
InformationsquelleAutor xhenryx14
Diese eingebaut ist, Schienen nun, Sie brauchen keine Ausländer. Siehe Abschnitt 3.6 Foreign Keys hier: http://edgeguides.rubyonrails.org/active_record_migrations.html
InformationsquelleAutor DB140141