Rails" No Route"当rake路线显示它存在时

时间:2016-04-05 20:01:48

标签: ruby-on-rails ruby routes param

我在佣金路线显示时获得No route matches [DELETE] "/users"

     user GET    /users/:id(.:format)         users#show
     PATCH  /users/:id(.:format)         users#update
     PUT    /users/:id(.:format)         users#update
     DELETE /users/:id(.:format)         users#destroy

在我看来,我有这个链接和路径:

      <td><%= link_to 'Destroy', user_path(user, :id => user.email), data: { confirm: 'Are you sure?' } %></td>

如您所见,我发送了id参数。

我可以通过将此添加到路线来解决此问题:

delete 'users' => 'users#destroy'

但是当我在控制器中检查params时,它没有id属性。我也试过

delete 'users/:id' => 'users#destroy'

以下是params的样子:

{"_method"=>"delete", "authenticity_token"=>"r81EQsF0z2eoIUTIrc3Rd2pQlVRNL6iEcM58DzkkOWCeLg+LLudBwhVvSyM7DTRXm2EGvKaMwCT+orbG8YDuOg==", "controller"=>"users", "action"=>"destroy"}

2 个答案:

答案 0 :(得分:0)

路线"/users"不存在且不应该存在。 "/users""/users/:id"

不同

在routes.rb文件中,为应该拥有的用户启用CRUD操作

Rails.application.routes.draw do
  ...
  resources :users
end

除此之外,上述行由rails解释为

delete 'users/:id', to: "users#destroy"

此处:id是路线名称的一部分。因此生成的路径助手需要一个参数。方法名称user_path在此处生成网址users/,第一个参数用于确定其余:id

如果您不想按ID识别资源,那么资源语法非常混乱。我宁愿做那样的事情

delete 'users/:email', to: 'users#destroy', as: 'delete_user'

您可以像这样调用帮助器

<%= link_to 'Destroy', delete_user_path(user.email), method: :delete, data: { confirm: 'Are you sure?' } %>

请注意,在您的控制器中,您必须更改设置用户的方式

@user = User.find(params[:email])

答案 1 :(得分:-1)

你需要添加动作&#39; destroy&#39;在您的视图中将其与RESTFUL动词相匹配。大概你的意思是将电子邮件作为id参数传递?

<%= link_to 'Destroy', {:action => "destroy :id => user.email), :method => :delete, data: { confirm: 'Are you sure?' } %>