ruby-on-rails - 创建删除事件记录的按钮时出错

标签 ruby-on-rails ruby rest web ruby-on-rails-3.2

删除我的工作人员模型的事件记录时遇到问题。

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_tobutton_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/

相关文章:

ruby-on-rails - 拦截ActiveRecord establish_connection初始化过程

ruby - 如何在logstash过滤器中使用redis?

java - Rest assured 3.0.6 pretty print 如何显示两项响应,而实际响应包含一项?

ruby-on-rails - 如何列出所有 Rails 3 rake 任务? rake -T 似乎不完整

ruby-on-rails - 表 "x"上的更新或删除违反了表 "fk_rails_5a7b40847a"上的外键约束 "x"

ruby-on-rails - block 前参数的括号

java - 请求与RESTITO部分匹配

rest - REST API 是否应该返回嵌套对象或指向该对象的链接?

ruby-on-rails - Rails 3 中默认的 Rails 日志记录是测量什么样的时间?

mysql - Rails 事件模型协会问题