2010-04-13 8 views
6

Jestem nowy w Ruby i Rails, więc proszę o mnie. Stworzyłem bardzo prostą aplikację blogową zawierającą zarówno posty, jak i komentarze. Wszystko działa świetnie. Moje następne pytanie dotyczące dodawania kategorii. Zastanawiam się, jak najlepiej to zrobić. Ponieważ nie widzę zbyt daleko przede mną, jeśli chodzi o Railsy, ​​myślałem, że zapytam.Jaki jest najlepszy sposób dodawania kategorii do postów - blog Ruby on Rails

Aby było jasne, chciałbym, aby jeden post mógł mieć wiele kategorii, a kategoria może mieć wiele postów.

Czy jest to najlepszy sposób, aby utworzyć tabelę "kategorii", a następnie użyć modeli wpisów i kategorii do wykonania has_many :posts, has_many :categories? Czy ustawiłbym również routes.rb tak, aby posty były umieszczane w kategoriach?

A może jest łatwiejszy sposób, po prostu dodając kolumnę kategorii do istniejącej tabeli wpisów? (w takim przypadku wyobrażam sobie, że posiadanie wielu kategorii byłoby trudne).

Odpowiedz

8

Ponieważ chcesz mieć wiele do wielu relacji między kategoriami i wpisami, chciałbym (i zrobię) używać wtyczki do tagowania, takiej jak ActsAsTaggableOn, gdzie możesz zdefiniować, do czego odnosi się "tag", i nazwać go " Kategoria." Prosty i skuteczny. W formularzu możesz ograniczyć możliwe wartości "tagu" z białą listą (np. "Kodowanie", "przepisy", "wakacje") dla różnych kategorii.

19

To zależy, jak wiele wysiłku jesteś gotów do wprowadzenia - ty mógłby użyć wtyczki znakowania lub utwórz has_and_belongs_to_many relacji w obu słupków i modeli kategorii, ale polecam coś innego.

Jeśli utworzysz trzeci model, "Kategoryzacje", jako rodzaj "kleju" pomiędzy Stanami i Kategoriami, możesz mieć większą kontrolę. Poczta has_many :categories :through => categorizations i Kategoria has_many :posts :through => :categorizations

Zaletą tego jest to, że twoje kategorie nie są przechowywane w kodzie, ale raczej w bazie danych - więc dodawanie/usuwanie/edycja nie wymaga modyfikacji żadnego kodu źródłowego. Sposób konfigurowania tras zależy wyłącznie od Ciebie - możesz mieć /categories/:id zwrócić listę wszystkich postów należących do tej kategorii lub zaimplementować jakiś formularz wyszukiwania wykorzystujący jedną lub więcej kategorii jako parametry.

Ryan Bates ma excellent screencast wyjaśniając wszystko, z kilkoma różnymi sposobami rozwiązania problemu.

Wiem, że wspomniałeś, że jesteś nowy w RoR, więc przepraszam, jeśli jest to nieco skomplikowane, jeśli chcesz. Jak już wspomniałem, wtyczka może być najlepsza dla twoich potrzeb, ale uważam, że zawsze jest miło ją zakodować samemu, jeśli to możliwe, z dodatkową korzyścią wynikającą z większej elastyczności i kontroli :)