In Ruby on Rails, wie Fremdschlüsseleinschränkung in Migration hinzufügen?Unterstützung für Fremdschlüsseleinschränkung in Rails
Antwort
AFAIK, es gibt keine integrierte Unterstützung dafür, aber es gibt several plugins, die Ihnen dabei helfen. Sie können sie auch manuell zu Ihren Migrationsdateien hinzufügen, verwenden Sie dazu einfach die execute-Methode, z. (Probe von Rails API):
class MakeJoinUnique < ActiveRecord::Migration
def self.up
execute "ALTER TABLE `pages_linked_pages` ADD UNIQUE `page_id_linked_page_id` (`page_id`,`linked_page_id`)"
end
def self.down
execute "ALTER TABLE `pages_linked_pages` DROP INDEX `page_id_linked_page_id`"
end
end
Hier ist ein Juwel-basierte Lösung, die Unterstützung für das Hinzufügen und Entfernen von Fremdschlüssel-Constraints enthält, scheitert nicht mit SQLite und funktioniert einwandfrei mit schema.rb Dateien:
FYI, 'Ausländer' erzeugt keine Fremdschlüssel in' schema.rb', wenn SQLite verwendet wird, da SQLite keine Fremdschlüssel unterstützt. – ashes999
Dies ist ein Update für die matthuhiggins-Ausländer gem: http://github.com/sparkfly/foreigner
Eigenschaften:
- rspec Abdeckung, getestet gegen PostgreSQL 8.3.9 und MySQL 5.0.90
- Migrationsunterstützung
- schema.rb Unterstützung
Zukünftige Versionen werden CHECK-Einschränkungen für PostgreSQL enthalten, die mehr zu implementieren benötigt wird -Tabelle Vererbung.
Danke. das Juwel des Ausländers funktioniert nicht gut mit der Änderungsmethode, insbesondere wenn die Tabelle noch nicht erstellt wurde. Das funktioniert super – Sean
Ihre begrüßt. Lass mich wissen (über GitHub), wenn Sie irgendwelche Fehler finden. –
Wäre es ausreichend mit dem Hinzufügen der folgenden, zum Beispiel mit Products
und User
Modelle?
add_index :products, :user_id
Das Hinzufügen eines Indexes wird sicherlich bei der Abfrageleistung hilfreich sein, aber es wird nicht dazu führen, dass eine Datenbank Fremdschlüsseleinschränkungen erzwingt. –
- 1. Namenskonvention für Fremdschlüsseleinschränkung ändern
- 2. ImageMagick Unterstützung für Ruby on Rails Windows-
- 3. Fremdschlüsseleinschränkung in Sqlite3 fehlgeschlagen
- 4. Ist in Rails für das Default-Ersetzungs-Idiom Unterstützung eingebaut?
- 5. HTTP/2-Unterstützung in Rack/Rails
- 6. Kolben Fremdschlüsseleinschränkung
- 7. Zusammengesetzte Fremdschlüsseleinschränkung
- 8. Ruby on Rails aktive Unterstützung
- 9. Autorisierungs-Plugins für RoR mit Rails 3-Unterstützung
- 10. MySQL Fremdschlüsseleinschränkung - Ganzzahl Spalte
- 11. Rails: SSL-Unterstützung aktiviert wird Chrome verwirrt
- 12. Löschen der Fremdschlüsseleinschränkung
- 13. Ruby-Unterstützung für XML-Namespaces
- 14. Unterstützung für SSL in PhantomJS
- 15. Warum Rails4 Drop-Unterstützung für "Vermögenswerte" Gruppe in der Gemfile
- 16. SQL Server 2005: Nullable Fremdschlüsseleinschränkung
- 17. Unterstützung für DEVPATH
- 18. Eclipse-Unterstützung für axis2
- 19. D Unterstützung für COM
- 20. IDE-Unterstützung für WinForms
- 21. mySQL: Was verhindert meine Fremdschlüsseleinschränkung?
- 22. Unterstützung für OpenSSL-Cookies
- 23. Unterstützung für Druckerprogrammierung
- 24. Android-Unterstützung für parseUnsignedLong?
- 25. Babel Unterstützung für Object.entries
- 26. Unterstützung für verteilte Interoperabilität
- 27. PHP-Unterstützung für MongoDB
- 28. kann keine Fremdschlüsseleinschränkung in phpmyadmin hinzufügen
- 29. product_id referenziert in Fremdschlüsseleinschränkung existiert nicht
- 30. Kann keine Fremdschlüsseleinschränkung in Mysql hinzufügen
Alte Post, aber falls jemand sieht folgendermaßen aus: ein eindeutiger Index zu einem Fremdschlüssel nicht gleichwertig ist, so glaube ich, diesen Code nicht die Frage des OP beantwortet. – dsetton