5

我认为我有以下代码(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'

当我运行 rake 路线时,我得到:

GET    /order_submissions/:id(.:format)        order_submissions#show

(.:format) 可能是什么搞砸了,但我不知道为什么。我只是希望它在那里放一个斜线。

如果我将代码更改为此它会修复它:

 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'
4

3 回答 3

9

order_submissions_path复数)指向/order_submissions。它有两个参数,第一个是请求的格式(例如 html)。您的 ID 正在为此参数传递,从而导致您看到的结果 URL。

您实际上需要单数路径帮助order_submission_path程序 ,它接受一个 ID 作为第一个参数。

于 2014-04-01T16:40:10.130 回答
4

因为它应该是单数形式:

order_submission_path(order_submission.id) 

不是

order_submissions_path(order_submission.id)

order_submissions_path指向索引操作。您也可以id从最后删除。

更新:

请注意您的路由文件。您在那里定义了任何资源吗?您发布的路线不会生成任何 url_helper 因为您没有指定路线名称(很可能此条目已过时,因为我希望那里也有resources :order_submissions某个地方)。

于 2014-04-01T16:35:56.103 回答
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. 也许你的索引路线?

于 2014-04-01T16:41:34.257 回答