Pomocnicy ścieżek generują ścieżki z kropkami zamiast ukośników

89

W moich route.rb mam:

resources :message_threads

Kiedy dzwonię:

message_threads_path(1)

Dostaję:

/message_threads.1

Dlaczego to? Moje inne zasoby działają dobrze. Czy nie poprawiam liczby mnogiej tego poprawnie, czy coś?

ghempton
źródło

Odpowiedzi:

142

Tak, to jest błąd dotyczący liczby mnogiej.

Przekazując ID 1, zakładam, że chcesz wyświetlić pojedynczy rekord.

Musisz więc użyć liczby pojedynczej „message_thread”:

message_thread_path(1)

Który przyniesie:

http://localhost:3000/message_threads/1
Scott
źródło
3
Heh. To zdarza się nam wszystkim; często. Prawdopodobnie nie będzie to ostatni raz, kiedy zobaczysz ten błąd!
Scott
Otrzymuję ten sam błąd z nazwaną trasą, którą utworzyłem, i nie tworzę liczby mnogiej. Jaka byłaby tam poprawka?
kakubei
1
@kakubei, sprawdź plik tras. Dzwonisz resources :my_modelczy resources :my_models? (Musisz dodać liczbę mnogą w pliku tras.)
JellicleCat,
Wszystkie moje trasy są w liczbie mnogiej.
kakubei
1
Właśnie wyszedłem o 17:00, miałem walnąć głową w klawiaturę, to było to. Dzięki stary.
Phantomwhale
19

Czasami dzieje się tak również wtedy, gdy nie podajesz parametru: as w swojej trasie:

delete "delete/:id" => "home#delete"

Zmienić na:

delete "delete/:id" => "home#delete", as: :delete

(zignoruj ​​dziwny przykład, tak się złożyło, że właśnie natknęliśmy się na wewnętrzną aplikację, którą tworzymy)

Jamon Holmgren
źródło
4
To zadziałało dla mnie. Wyszczególniając : jak dałem mi nazwę, do której mógłbym dodać "_path" i sprawić, by Railsy wiedziały, o co do cholery prosiłem w link_to. Pierwotnie, kiedy mój plik tras miał: match "/xyz/show/:project_id" => "xyz#show_project", :via => [:get] mój widok znaczników: <%= link_to "Show Details", xyz_show_path(@project) %> nadal produkował: http://localhost:3000/xyz/show.1 Zmienianie pliku tras na: match "/xyz/show/:project_id" => "xyz#show_project", :via => [:get], :as => "show" dozwolone: <%= link_to "Show Details", show_path(@project) %> to work.
ayang
0

Inne osoby, które tu wylądują, mogą znajdować się w takiej sytuacji:

Jeśli masz zadeklarowany pojedynczy zasób w routes.rb:

resource :map

Nie musisz przekazywać obiektu map_path. Próba wywołania map_path(map)spowoduje podobne zachowanie (np. Adres URL map.12).

techpeace
źródło