我使用以下行创建链接
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将为mail
和user
嵌套资源,例如:
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)
。