У моїх маршрутах.rb у мене є таке:
resources :message_threads
Коли я телефоную:
message_threads_path(1)
Я отримав:
/message_threads.1
Чому це? Інші мої ресурси працюють нормально. Хіба я не правильно це плюралізую чи щось?
Відповіді:
Так, це помилка плюралізації.
Передаючи ідентифікатор 1, я припускаю, що ви хочете показати один запис.
Отже, вам потрібно використовувати однину 'message_thread':
message_thread_path(1)
Що дасть:
http://localhost:3000/message_threads/1
resources :my_model
чи resources :my_models
? (Вам потрібно зробити множину у файлі маршрутів.)
Іноді це також відбувається, коли ви не вказуєте параметр: як у своєму маршруті:
delete "delete/:id" => "home#delete"
Змінено на:
delete "delete/:id" => "home#delete", as: :delete
.
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) %>
працювати.
У цій ситуації можуть опинитися інші люди, які приземляються тут:
Якщо у вас є окремий ресурс, задекларований у вашому routes.rb
:
resource :map
Вам не потрібно передавати об’єкт map_path
. Спроба зателефонувати map_path(map)
призведе до подібної поведінки (тобто URL-адреси, як map.12
).