0

我使用以下行创建一个链接

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
4

1 回答 1

2

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

Rails 方式将具有嵌套资源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)在您的链接中使用。

于 2013-09-23T11:24:38.357 回答