Помощники пути создают пути с точками вместо косой черты

89

В моем routes.rb есть следующее:

resources :message_threads

Когда я звоню:

message_threads_path(1)

Я получил:

/message_threads.1

Почему это? Другие мои ресурсы работают нормально. Я не правильно использую множественное число, что ли?

Ghempton
источник

Ответы:

142

Да, это ошибка множественного числа.

Передавая ID 1, я предполагаю, что вы хотите отобразить одну запись.

Поэтому вам нужно использовать единственное число message_thread:

message_thread_path(1)

Что даст:

http://localhost:3000/message_threads/1
Скотт
источник
3
Хех. Это случается со всеми нами; часто. Вероятно, вы увидите эту ошибку не в последний раз!
Скотт
Я получаю ту же ошибку с именованным маршрутом, который я создал, и я не использую его во множественном числе. Что бы там исправить?
kakubei
1
@kakubei, проверьте свой файл маршрутов. Вы звоните resources :my_modelили resources :my_models? (Вам нужно использовать множественное число в файле маршрутов.)
JellicleCat 06
Все мои маршруты имеют множественное число.
kakubei
1
Просто прошло 5 часов вечера, собирался удариться головой о клавиатуру, вот и все. Спасибо чувак.
Phantomwhale
19

Иногда это также происходит, когда вы не предоставляете параметр: as в своем маршруте:

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

Изменился на:

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

(не обращайте внимания на странный пример, мы только что столкнулись с этим для внутреннего приложения, которое мы создаем)

Хамон Холмгрен
источник
4
Это сработало для меня. Указание : as дало мне имя, к которому я мог бы добавить «_path», и чтобы Rails знал, какого черта я просил в link_to. Первоначально, когда в моем файле маршрутов было: match "/xyz/show/:project_id" => "xyz#show_project", :via => [:get] моя разметка представления: <%= link_to "Show Details", xyz_show_path(@project) %> продолжалось создание: http://localhost:3000/xyz/show.1 Изменение файла маршрутов на: match "/xyz/show/:project_id" => "xyz#show_project", :via => [:get], :as => "show" разрешено: <%= link_to "Show Details", show_path(@project) %> для работы.
аянг
0

Другие люди, которые приземляются здесь, могут оказаться в такой ситуации:

Если у вас есть единственный ресурс, объявленный в вашем routes.rb:

resource :map

Вам не нужно передавать объект map_path. Попытка позвонить map_path(map)приведет к аналогичному поведению (например, URL-адрес map.12).

techpeace
источник