2010-04-13 5 views
6

Ich bin neu in Ruby und Rails so bitte mit mir. Ich habe eine sehr einfache Blog-Anwendung mit Posts und Kommentaren erstellt. Alles funktioniert super. Meine nächste Frage zum Hinzufügen von Kategorien. Ich frage mich, wie ich das am besten machen könnte. Da ich vor mir noch nicht zu weit sehen kann, dachte ich, wenn ich nach Rails komme, würde ich fragen.Was ist der beste Weg, um Kategorien zu Posts hinzuzufügen - Ruby on Rails Blog

Um klar zu sein, möchte ich, dass ein einzelner Beitrag mehrere Kategorien haben kann und eine Kategorie mehrere Beiträge haben kann.

Ist der beste Weg, dies zu tun, um eine 'Kategorien' Tabelle zu erstellen und dann die Posts und Kategorien Modelle zu tun, has_many :posts, has_many :categories? Würde ich dann auch die routes.rb so einstellen, dass Beiträge in Kategorien eingebettet sind?

Oder gibt es einen einfacheren Weg, indem Sie einfach eine Kategoriespalte zur vorhandenen posts-Tabelle hinzufügen? (In diesem Fall würde ich mir vorstellen, mehrere Kategorien zu haben, wäre schwierig).

Antwort

8

Da Sie eine Viele-zu-Viele-Beziehung zwischen Kategorien und Posts wünschen, würde ich (und mache) ein Tagging-Plugin wie ActsAsTaggableOn verwenden, wo Sie definieren können, worauf ein "tag" bezogen ist, und es aufrufen " Kategorie." Einfach und effektiv. In Ihrem Formular können Sie die möglichen Werte für ein "Tag" mit einer Whitelist (wie "Codierung", "Rezepte", "Urlaub") für Ihre verschiedenen Kategorien einschränken.

19

Es hängt davon ab, wie viel Mühe Sie bereit sind, in setzen - Sie ein Tagging-Plugin verwenden könnte, oder eine has_and_belongs_to_many Beziehung in beiden Beiträge und Kategorien Modelle einrichten, aber ich würde etwas ein bisschen anders empfehlen.

Wenn Sie ein drittes Modell, "Kategorisierungen", als eine Art "Klebstoff" zwischen Posts und Kategorien erstellen, können Sie mehr Kontrolle haben. Post has_many :categories :through => categorizations und Kategorie has_many :posts :through => :categorizations

Ein Vorteil davon ist, dass Ihre Kategorien nicht in Ihrem Code gespeichert werden, sondern in der Datenbank - so das Hinzufügen/Entfernen/Bearbeiten von ihnen erfordern Dich nicht, einen Quellcode zu modifizieren. Wie Sie die Routen einrichten, liegt ganz bei Ihnen - Sie könnten /categories/:id eine Liste aller Beiträge, die zu dieser Kategorie gehören, zurückgeben oder eine Art Suchformular implementieren, indem Sie eine oder mehrere Kategorien als Parameter verwenden.

Ryan Bates hat eine excellent screencast, die all dies erklärt, mit mehreren verschiedenen Möglichkeiten, das Problem anzugehen.

Ich weiß, Sie haben erwähnt, dass Sie neu in RoR sind, also entschuldige ich mich, wenn dies ein wenig kompliziert ist für das, was Sie wollen. Wie gesagt, ein Plugin mag für Ihre Bedürfnisse am besten sein, aber ich finde es immer schön, es selbst zu kodieren, wenn es möglich ist, mit dem zusätzlichen Vorteil, mehr Flexibilität und Kontrolle zu haben :)

Verwandte Themen