Gdzie umieścić metodę do tworzenia ciągu do url?

Cześć, mam pytanie o prawidłowe umiejscowienie kodu metody typu:

def create_url(input) callname = input.dup callname.gsub!(/[^a-z0-9]+/i, '-') return callname end
Mam kilka modeli i wszystkie będa korzystać z tej metody do budowania część url z ich nazwy. Czy to powinno być w jakiejś klasie w /lib, czy w application_helper czy jeszcze gdzieś indziej?

A najfaniej by było gdyby dało się z tego korzystać tak: @book.title.create_url - ale nie wiem jak to robić (wykorzystane w widoku podczas tworzenia linka)

Żeby działało w podany sposób (@book.title.create_url), najprościej byłoby dodać stosowną metodę do klasy String (jeśli title zwraca String). ALE nie jest to z pewnością dobry sposób rozwiązywania tego typu problemów. Lepiej będzie jeśli przekażesz @book jako argument do metody create_url(@book) (a może lepiej create_book_url(@book)). Jeśli korzystasz z tej metody tylko w widokach to wystarczy umieścić ją np. w ApplicationHelper. Jeśli zależy Ci na unikalności “permalinków” generowanych na podstawie tytułu lepiej byłoby tworzyć je w modelu Book i zapisywać w bazie danych jako dodatkowa kolumna (wraz z validates_uniqueness_of :permalink).

Rzuć okiem na rozwiązania z Githuba:



Dzięki za odpowiedź, a czemu mam przekazywać @book, a nie @book.title jako parametr? Linki nie muszą być unikalne, bo będzie jeszcze id po pytajniku.

Możesz przekazać zarówno @book jak i @book.title - to tylko kwestia ideologiczna (wydało mi się to spójne z innymi helperami w RoR).

Dopytuję z ciekawości :slight_smile: Zależy mi na spójności i wysokiej jakości… :slight_smile: Dzięki!