我在佣金路线显示时获得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"}
答案 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?' } %>