我使用以下行创建链接
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
答案 0 :(得分:2)
它生成网址/mail/4.3
的原因是因为mail_path
只接受一个参数,所以它将第二个作为格式。这是因为您使用的mail_path
网址助手不适用于您在问题中发布的DELETE
路线,而是其他路线。
Rails方式是为mail
和user
设置嵌套资源,如:
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)
。