2010-12-07 2 views
1

Angenommen, Sie haben ein Buchmodell, das zu mehreren Kategorien gehören kann. Kategorien sind vordefiniert, aber wir können den Benutzer auch seine eigenen hinzufügen lassen, obwohl die Standardeinstellungen ausreichen.Attribut mit mehreren Werten in Rails: booleans, string und serialize oder hbtm?

Was ist der beste Weg, um mit Ihnen umzugehen?

a) eine viele zu viele Beziehung zu einem Kategorie-Modell? Aber ist das nicht Overkill angesichts der Tatsache, dass Standardkategorien die meiste Zeit ausreichen? b) Boolesche Werte für jede Standardkategorie und eine zusätzliche Zeichenfolge für benutzerdefinierte Kategorien C) nur eine Zeichenfolge und die Verwendung von serialize? Aber dann könnte es ein bisschen schwieriger sein, Checkbox-Eingänge für die Standard-Auswahl d) jeden anderen Vorschlag von Ihnen zu verwenden ...

Vielen Dank für Ihre Zeit!

Dank

Antwort

2

Sie wollen wahrscheinlich HABTM verwenden. Es ist nicht übertrieben, wenn Sie jemals Informationen über die verschiedenen Kategorien sammeln möchten. Datum erstellt zum Beispiel. Sie erhalten außerdem die Möglichkeit, alle Bücher für eine bestimmte Kategorie einfach abzurufen, ohne sich um Bereiche innerhalb des Buchmodells kümmern zu müssen.

Sie könnten auch in der Lage sein, andere Objekte zu Kategorien hinzuzufügen. Es gibt nicht viel Overhead, und es ist ziemlich einfach einzurichten, also lohnt es sich, IMHO.

Hilfe bei der Implementierung HABTM mit Kontrollkästchen, überprüfen Sie die HABTM Checkboxes Railscast. Für eine Diskussion der Unterschiede zwischen HABTM und has_many :through empfehle ich wirklich die Two Many-to-Many Railscasts.

+0

Wenn Sie Informationen zu den Kategorien sammeln möchten, müssen Sie diese als eine: has_many: through => Beziehung einrichten. HABTM fällt aus diesem Grund irgendwie in Ungnade. – brycemcd

+0

Ich meinte auf jedem Kategorie-Objekt selbst - das ist sicherlich wahr für die Verfolgung von Informationen über den Beitritt zwischen einer Kategorie und einem Buch. Es scheint, als ob diese Railscasts die einzige gültige Verwendung von HABTM zeigen ... einige Kategorienimplementierungen. –

+0

Was ist mit Aufführungen in diesem Fall? Es scheint mir, dass die Verwendung von hbtm die Implementierung von etwas eifrigem Laden oder Caching später erfordert, aber vielleicht früher als bei den anderen Lösungen. Vor allem wenn es ein paar andere Attribute wie Kategorie gibt. Darf ich das glauben? – Nycen

Verwandte Themen