Rails 4:URL中的点以分隔ID

时间:2013-09-23 10:51:46

标签: ruby-on-rails routes

我使用以下行创建链接

link_to_remote 'Delete', :url => mail_path(user_id, mail.id), :confirm => 'Delete?', :method => :delete

这将以/mail/4.3的形式创建DELETE请求 路线是

delete 'mail/:user_id/:id', to: 'mail#destroy'

我正在尝试使用

访问控制器中的两个ID
@mail = Mail.find(params[:id])
@user = User.find(params[:user_id])

然而,它失败并出现错误

ActionController::RoutingError (No route matches [DELETE] "/mail/4.3")

我在这里缺少什么?

更新1)“rake routes”的输出

Prefix     Verb      URI Pattern                          Controller#Action
mail       DELETE    /mail/:user_id/:id(.:format)        mail#destroy

1 个答案:

答案 0 :(得分:2)

它生成网址/mail/4.3的原因是因为mail_path只接受一个参数,所以它将第二个作为格式。这是因为您使用的mail_path网址助手不适用于您在问题中发布的DELETE路线,而是其他路线。

Rails方式是为mailuser设置嵌套资源,如:

resources :users do
  resources :mail
end

为您提供路线助手user_mail_path(@user, @mail)(或类似的东西,具体取决于邮件的多元化)和网址/users/4/mail/3

或者,要继续您的路径,您可能必须为删除路线命名:

delete 'mail/:user_id/:id', to: 'mail#destroy', as: 'delete_mail'

并在您的链接中使用delete_mail_path(user_id, mail.id)