Ist es besser, den Standardwert für die Migration oder den Rückruf festzulegen? Es ist schwierig, den Standardwert in der Migration zu löschen (oder einen anderen zu setzen), aber in einem Modell ein weiteres Stück CodeStandardwerte für Modelle in Schienen
Antwort
Definieren von Standardeinstellungen in Ihrer Migration hat auch einige Nachteile. Dies funktioniert nicht, wenn Sie einfach Model.new
anrufen.
Ich ziehe einen after_initialize
Rückruf zu schreiben, die mir Attribute gesetzt Standard lässt:
class Model < ActiveRecord::Base
after_initialize :set_defaults, unless: :persisted?
# The set_defaults will only work if the object is new
def set_defaults
self.attribute ||= 'some value'
self.bool_field = true if self.bool_field.nil?
end
end
Als allgemeine Regel gilt, auf das Backend, erzwingen Einschränkungen in Modellen und in der DB. Es ist wie Validierung JS und nicht Validierung in der Backend-Seite (PHP, ROR, etc). Jemand kann Ihren JS ändern, um die Validierung zu bestehen, und da Sie nicht im Back-End validiert haben, ist Ihre Site möglicherweise kompromittiert. Also, immer auf beiden Seiten validieren, zumindest wenn Ihr App-Server Kompromisse eingeht, kann der DB-Server eine gewisse Verteidigung aufbringen.
In Rails 5 ermöglicht die attributes API Spezifikation von Standardwerten. Die Syntax ist einfach und ermöglicht es Ihnen, einen Standard ohne eine Migration zu ändern.
- 1. Schienen 4.0.0 Fremdschlüssel für Modelle
- 2. Dynamisch Bereiche in Schienen Modelle
- 3. aktualisiert Modelle in Schienen/Migrationen
- 4. Schienen 4 Form für mehrere Modelle
- 5. Schienen Routen für Modelle mit Abstammung
- 6. Schienen: Index mehrere Modelle?
- 7. Anfrage Schienen Modelle mit URL_PARAMS
- 8. Schienen url_for und namespaced Modelle
- 9. Schienen - Benutzereingabe für mehrere Modelle in einem einzigen Formular - Wie
- 10. Schienen 3.2.9 und Modelle in Unterordnern
- 11. Schienen 4: ActiveRecord keine Attribute speichern, Standardwerte speichern
- 12. schienen: wie man zwei ähnliche modelle
- 13. Implementieren Sie korrekte Modelle für eine Mitfahrgelegenheitsanwendung - Schienen
- 14. Schienen 3 laden alle Modelle beim Start
- 15. Schienen 3.2.3: Gewusst wie: zugeordnete Modelle zuordnen?
- 16. Schienen 3: Wie generieren Modelle für bestehende Datenbanktabellen
- 17. OCaml: Standardwerte für Funktionsargumente?
- 18. Standardwerte für Laravel Formularfelder
- 19. Standardwerte für Nullwerte
- 20. Standardwerte für AdoNetAppender Parameter
- 21. Schienen erstellen verknüpfte Modelle ohne zu speichern?
- 22. Standardwerte für IP_MULTICAST_IF
- 23. eine Liste aller Modelle von Schienen erhalten
- 24. So erstellen Sie verwandte Modelle in einem Formular in Schienen
- 25. Standardwerte für Status, Steuerklasse in Magento festlegen
- 26. Standardwerte für die Objekte in OracleDB
- 27. Standardwerte für Child-Klasse Attribute in Rails
- 28. Schienen, wie Sie die Modelle korrekt in einen Namensraum bewegen
- 29. Eine Liste der verwandten Modelle in Schienen erhalten
- 30. Hilfsmethoden für Modelle in Rails
Warum nicht 'before_create'? Dann müssen Sie nicht ': persisted?' –
@WojciechBednarski überprüfen, da 'before_create' den vorhandenen Wert überschreibt und wir den Standardwert nicht setzen möchten, wenn das Objekt bereits Werte hat. Aus diesem Grund setzen wir den Standardwert nur dann, wenn das Objekt neu und nicht persistent ist. –
'before_create' wird nur einmal während der Lebensdauer des Modells in der DB-Reihe gestartet. 'before_update' wird jedes Mal ausgelöst, wenn Sie das Modell in DB ändern. –