我在视图中有以下代码(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
成功显示为ID号(533ab7337764690d6d000000)
但是...
order_submissions_path(order_submission.id)
创建一个以:
形式出现的网址order_submissions.533ab7337764690d6d000000
我希望它是
order_submissions/533ab7337764690d6d000000
那个时期来自哪里?
这是我的路线:
get 'order_submissions/:id' => 'order_submissions#show'
当我运行rake路线时,我得到:
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'
答案 0 :(得分:6)
order_submissions_path
(复数)指向/order_submissions
。它需要两个参数,第一个是请求的格式(例如html)。您的ID将被传入此参数,从而导致您看到的结果URL。
你真的想要一个单一的路径助手order_submission_path
,它接受一个ID作为第一个参数。
答案 1 :(得分:2)
因为它应该是单数形式:
order_submission_path(order_submission.id)
不
order_submissions_path(order_submission.id)
order_submissions_path
指向索引操作。您也可以从最后删除id
。
更新:
注意你的路线文件。你有资源吗?您发布的路由不会生成任何url_helper,因为您没有指定路由名称(很可能这个条目已过时,因为我预计那里也有resources :order_submissions
。
答案 2 :(得分:1)
默认情况下,您没有获得指定路线。例如,您从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
。也许你的指数路线?