轨道 4:在 URL 中点以分隔 ID



我使用以下行创建链接

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'

我正在尝试使用

@mail = Mail.find(params[:id])
@user = User.find(params[:user_id])

但是,它失败并显示错误

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

我在这里错过了什么?

更新 1("耙子路线"的输出

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

它生成 url /mail/4.3的原因是mail_path只接受一个参数,所以它采用第二个参数作为格式。这是因为您使用的 mail_path 网址帮助程序不是针对您在问题中发布的DELETE路由,而是针对其他路由。

Rails Way将为mailuser嵌套资源,例如:

resources :users do
  resources :mail
end

为您提供路由助手user_mail_path(@user, @mail)(或类似的东西,具体取决于邮件的复数形式(和 URL /users/4/mail/3

或者,要继续您的路径,您可能需要命名您的删除路由:

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

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

最新更新