【问题标题】:Errors creating a button to delete an active record创建删除活动记录的按钮时出错
【发布时间】:2013-07-05 23:45:54
【问题描述】:

删除我的工人模型的活动记录时遇到问题。

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

我的工作控制器销毁方法

    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。奖励积分我们可以将我的引导按钮类添加到此按钮

class: "btn btn-small bit-danger"

【问题讨论】:

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


    【解决方案1】:

    发生这种情况的原因是,当您在 url_to(在 link_tobutton_to 等内部)将处理的某个地方使用像 @worker 这样的实例变量时,它将假定基于类名的路由。

    在这种情况下,您的班级是Worker。由于@workerWorker,它正在尝试使用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' %>
    

    希望这会有所帮助!

    【讨论】:

    • 我试试看!这更能解释为什么当我创建表单来创建工作人员时,我还必须传入一个用户。
    • 哇,谢谢你把它修好了。现在,如果我想将我的引导按钮类添加到该按钮。我可以在这里这样做还是必须在我的样式表中这样做?
    • 已修改以显示可以包含自定义类的示例,希望对您有所帮助!
    • 谢谢你,摇滚! @MattSanders
    猜你喜欢
    • 2016-11-19
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多