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


89

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

resources :message_threads

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

message_threads_path(1)

Я получил:

/message_threads.1

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

Ответы:


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).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.