Ich habe eine Frage, wie Sie die Modelle in Rails bauen. Nehmen wir zum Beispiel das soziale Netzwerk Tumblr. Sie können dort auf verschiedene Arten posten. Links, nur Text, Fotos, Gespräche. Jetzt möchte ich etwas Ähnliches machen, aber ich bin mit der Modellierung meiner App auf Lager. Nehmen wir an, ich möchte ein Post
Modell haben. So können meine Nutzer entweder nur einen Text oder einen mit einem Bild posten. Also ich denke, ich brauche auch ein Image
Modell. Nehmen wir an, ich möchte, dass meine Benutzer ein Ereignis posten können, aber als eine Form eines Beitrags. Also ich denke, ich brauche ein Event
Modell. Und so, vielleicht werde ich in Zukunft eine andere Idee für eine andere Art von Post haben (also sollte es immer auf die Post bezogen sein). Wie würden Sie die Modelle und Beziehungen so aufbauen, dass es leicht erweiterbar ist? Ich denke an etwas wie Enums von Java.Model Post mit verschiedenen Typen in Rails
0
A
Antwort
0
werde ich ein Modell Post
für alle Arten der Post verwenden (Bild, Ereignis ...) Zum Beispiel posts
Tabelle:
create_table :posts do |t|
t.belongs_to :author
t.column :post_type, :integer, default: 0
t.column :title, :string
t.column :body, :text
t.column :image_url, :string
t.column :star_at, :datetime
t.column :end_at, :datetime
t.timestamps
end
Modellspezifische Validierung für jeden Post-Typen hat:
class Post < ActiveRecord::Base
enum post_type: [ :event, :image, :message]
validates :image_url, presence: true, if: ->{ image? }
validates :start_at, :end_at, presence: true, if: ->{ event? }
validates :title, :body, presence: true, if: ->{ message? }
end
Gründe, diesen Weg zu wählen: alle
- Einfach holen Daten aus der Datenbank. Keine Gewerkschaften, keine Mehrfachauswahl.
- Einfaches Verwalten der Zwischenspeicherung, Regeln des Besitzers, ...
- Verwenden Sie die Bedenken des Modells für jeden Post-Typ, um ein sauberes Modell zu haben.
Verwandte Themen
- 1. Tupel mit verschiedenen Typen
- 2. Recyclerview mit verschiedenen Typen
- 3. Operator Überladung mit verschiedenen Typen
- 4. Rails Model Association Verwirrung
- 5. Benchmarking Rails Model Methoden
- 6. Dynamische Schemen in Rails Model
- 7. Filter Wordpress Suchergebnisse zwischen verschiedenen (custom) Post-Typen
- 8. Wordpress verschiedene funktionsfähige Bildgröße für verschiedenen Post-Typen
- 9. Rails Abfrage mit verschiedenen
- 10. gleicher Elementname mit verschiedenen komplexen Typen
- 11. Benutzerdefinierte Post-Typen
- 12. Jekyll mehrere Post-Typen
- 13. Fields_for Nested Model Rails 3.2.2
- 14. C++ Symmetrische binäre Operatoren mit verschiedenen Typen
- 15. Rails-Tests mit verschiedenen Integrationen
- 16. Definiere zweidimensionales dynamisches Array mit verschiedenen Typen
- 17. typescript multidimensionales Array mit verschiedenen Typen
- 18. Sammlung von verschiedenen generischen Typen
- 19. Haskell Eq zwischen verschiedenen Typen
- 20. Sortierung der verschiedenen Typen in C# Liste
- 21. Unterschiede zwischen verschiedenen Bool-Typen?
- 22. POST-Methode in RestClient mit Rails
- 23. Unterschied zwischen verschiedenen Integer-Typen
- 24. Coerce-Typen in verschiedenen Namespaces mit identischem Layout in C#
- 25. Suche in zwei verschiedenen Typen mit unterschiedlichen Zuordnungen in Elasticsearch
- 26. Schieben von Daten in verschiedenen Komponenten POST
- 27. benutzerdefinierte Post-Typen verknüpfen Hierarchie
- 28. Unterschied zwischen verschiedenen SQL-Typen?
- 29. Zugriff auf außerhalb von @model deklarierten Typen in MVC
- 30. Active Model Serializer mit verschiedenen Serialisierer für jedes Modell
Okay, können Sie mir erklären, warum es besser sein sollte, nur ein Modell für alle Typen zu verwenden, anstatt mehrere Modelle zu verwenden? – Sylnois
hinzugefügt Gründe für die Antwort –