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
Zależy mi na spójności i wysokiej jakości…
Dzięki!