0

编辑我的 Rails 4 应用程序 routes.rb 文件,我得到了意想不到的行为(无论如何,我的观点是出乎意料的)。

我正在尝试创建一个更新预订记录的链接。我在我的 BookingsController 中创建了一个名为 WITHDRAW 的操作,准备好处理更新过程。我希望链接传递预订 ID,我的链接代码是这样的:

<%= link_to "Withdraw this booking", bookings_withdraw_path(@booking), :confirm => "Are you sure you want to withdraw this booking?", :method => :patch %>

当我尝试设置此链接的路线时,我的问题出现了。如果我将以下行添加到我的路由文件中:

match 'bookings/withdraw/:bid' => 'bookings#withdraw', via: 'patch'

然后当我运行 rake 命令来检查它显示的路线时:

bookings_withdrawn GET    /bookings/withdrawn(.:format)          bookings#withdrawn
                   PATCH  /bookings/withdraw/:bid(.:format)      bookings#withdraw

如您所见, WITHDRAW 路径是上述路径的一部分(顺便说一下,WITHDRAWN 是不同的路径)。如果我从路径中删除 /:bid 部分,那么它会创建自己的路径,这是我所期望的。

有人可以解释为什么会这样吗?

4

2 回答 2

1

试试这个

在你的路由文件中传递一个resources :bookings像这样的块

  resources :bookings do
    member do
      patch :withdraw
    end
  end

并删除这个

match 'bookings/withdraw/:bid' => 'bookings#withdraw', via: 'patch'
于 2013-09-22T16:53:28.553 回答
0

正如我在评论中所写,您应该:as为您的路线添加选项,即:

match 'bookings/withdraw/:bid' => 'bookings#withdraw', via: 'patch', as: 'bookings_withdraw'

由于动态部分:bid,命名路由可能不是自动生成的,AFAIK Rails 在这种情况下不会生成隐式命名的路由,因此您必须显式添加它们,但我仍然无法在文档中找到它,也许如果有人已经得到并且可以分享,所以我会更新我的答案。

于 2013-09-22T17:54:10.150 回答