Почему помощник по URL в Ruby on Rails поместил точку в мой URL?
У меня есть следующий код на мой взгляд (RoR 4):
tbody
- @order_submissions.each do |order_submission|
tr
td = order_submission.id
td.table-actions
span = link_to "Show", order_submissions_path(order_submission.id)
td = order_submission.id
успешно отображается как идентификационный номер (533ab7337764690d6d000000)
Но...
order_submissions_path(order_submission.id)
Создает URL, который выглядит как:
order_submissions.533ab7337764690d6d000000
Я хочу чтобы это было
order_submissions/533ab7337764690d6d000000
Откуда взялся этот период?
Это мой маршрут:
get 'order_submissions/:id' => 'order_submissions#show'
И когда я запускаю рейковые маршруты, я получаю:
GET /order_submissions/:id(.:format) order_submissions#show
(.: Формат) - вероятно, что портит это, но я не знаю почему. Я просто хочу, чтобы это коснулось.
Если я изменю свой код на это, это исправит это:
span = link_to "Show", order_submissions_path + '/' + order_submission.id
Но это действительно очень глупый обходной путь.
РЕДАКТИРОВАТЬ: Вот мои маршруты:
get 'order_submissions' => 'order_submissions#index'
get 'order_submissions/new' => 'order_submissions#new'
post 'order_submissions' => 'order_submissions#create'
get 'order_submissions/:id' => 'order_submissions#show'
get 'order_submissions/:id/edit' => 'order_submissions#edit'
patch 'order_submissions/:id' => 'order_submissions#update'
get 'order_submissions/:id/delete' => 'order_submissions#delete'
delete 'order_submissions/:id' => 'order_submissions#destroy'
3 ответа
order_submissions_path
(множественное число) указывает на /order_submissions
, Он принимает два аргумента, первый из которых является форматом запроса (например, html). Ваш идентификатор передается для этого аргумента, что приводит к полученному URL-адресу.
Вы на самом деле хотите единственного помощника пути, order_submission_path
, который принимает идентификатор в качестве первого аргумента.
Потому что это должна быть форма единственного числа:
order_submission_path(order_submission.id)
Не
order_submissions_path(order_submission.id)
order_submissions_path
указывает на действие индекса. Вы также можете удалить id
с конца.
ОБНОВИТЬ:
Просто обратите внимание на ваш файл маршрута. У вас есть какие-либо ресурсы, определенные там? Маршрут, который вы опубликовали, не будет генерировать url_helper, так как вы не указали имя маршрута (скорее всего, эта запись устарела, так как я ожидаю, что есть resources :order_submissions
где-то там тоже).
Вы не получаете именованный маршрут по умолчанию. Маршрут, с которого вы показали rake routes
не перечисляет именованный маршрут, например.
GET /order_submissions/:id(.:format) order_submissions#show
Обычно вы видите названный маршрут перед GET
там.
Таким образом, вы можете определить это самостоятельно, и тогда ваш маршрут будет работать:
get 'order_submissions/:id' => 'order_submissions#show', as: :order_submission
Обратите внимание на as: :order_submission
немного. Сейчас, order_submission_path(order_submission.id)
буду работать. (Заметка: .id
это лишнее, если ваш order_submission
отвечает на to_path
и возвращается id
.)
Я предполагаю, что у вас есть другой маршрут в вашем rake routes
выход, который использует указанный маршрут и который не использует /:id
, Возможно, ваш индекс маршрута?