删除我的工作人员模型的事件记录时遇到问题。
Workers 与 Users 有 belongs_to 关系
我的路线
workers_update PUT /workers/update(.:format) workers#update
user_workers POST /users/:user_id/workers(.:format) workers#create
new_user_worker GET /users/:user_id/workers/new(.:format) workers#new
edit_user_worker GET /users/:user_id/workers/:id/edit(.:format) workers#edit
user_worker GET /users/:user_id/workers/:id(.:format) workers#show
DELETE /users/:user_id/workers/:id(.:format) workers#destroy
我的工作 Controller 销毁方法
def destroy
@worker.destroy
redirect_to(current_user)
end
我正在尝试创建的按钮位于工作人员显示页面上
<% if current_user?(@worker.user) %>
<%= button_to "Delete", @worker, method: :delete, data: {confirm: "Are you sure you want to delete this worker?"}%>
<%end%>
我尝试加载页面时遇到的错误
NoMethodError in Workers#show
Showing /home/elliot/rails_projects/EJWmining_app/mining_app/app/views/workers/show.html.erb where line #10 raised:
undefined method `worker_path' for #<#<Class:0x00000002b841e0>:0x00000003e5e338>
Extracted source (around line #10):
9: <% if current_user?(@worker.user) %>
10: <%= button_to "Delete", @worker, method: :delete, data: {confirm: "Are you sure you want to delete this worker?"}%>
11: <%end%>
不确定为什么会出现此错误。它说 Workers#show 中没有方法错误,它应该调用 Workers#destroy。奖励积分我们可以将我的 Bootstrap 按钮类添加到此按钮
class: "btn btn-small bit-danger"
最佳答案
发生这种情况的原因是,当您在 url_to
(link_to
或 button_to
等)将对其进行处理,并将采用基于类名的路由。
在这种情况下,您的类是 Worker
。由于 @worker
是一个 Worker
,它正在尝试使用 worker_path
,但您实际上并没有定义该路由。对于一个简单的资源,路由看起来像这样:
new_worker GET /workers/new(.:format) workers#new
edit_worker GET /workers/:id/edit(.:format) workers#edit
worker GET /workers/:id(.:format) workers#show
PUT /workers/:id(.:format) workers#update
DELETE /workers/:id(.:format) workers#destroy
所以 worker_path
上的 DELETE
就是您想要的。然而,由于您有一些更复杂的路线,您实际上需要 user_worker_path
。
你可以这样使用:
<%= button_to "Delete", user_worker_path(@user, @worker), method: :delete, ... %>
更多信息:
要添加类,您可以直接将其包含在 button_to
代码中:
<%= button_to "Delete", path_method, method: 'delete', class: 'myclass' %>
希望这对您有所帮助!
关于ruby-on-rails - 创建删除事件记录的按钮时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17498197/