【问题标题】:Very new to Rails and following the Getting Started tutorial (creating a Blog) destroy method is giving me an error对 Rails 非常陌生,遵循入门教程(创建博客)销毁方法给了我一个错误
【发布时间】:2017-06-18 20:17:42
【问题描述】:

我已经阅读了很多关于此问题的 SO 帖子和 Team Tree House 帖子,但无法修复它。

当我点击“删除”时,它告诉我“找不到 TodoItemsController 的动作‘显示’”

根据一些回复,我尝试了以下方法:

确保 gem 'jquery-rails' 在 gemfile 中并且 jquery_ujs 包含在 app/assets/javascripts/application.js 文件中

//= require jquery
//= require jquery_ujs

确保布局中的部分包含以下内容:

<%= javascript_include_tag :defaults %>
<%= csrf_meta_tag %>

这是我在 todo_items_controller.rb 中的销毁方法

def destroy
  @todo_item = @todo_list.todo_items.find(params[:id])  
  if @todo_item.destroy
    flash[:success] = "Todo List item was deleted."
  else
    flash[:error] = "Todo List item could not be deleted."
  end
  redirect_to @todo_list
end

这是我在 _todo_item.html.erb 中的“删除”链接

<%= link_to 'Delete', todo_list_todo_item_path(@todo_list, todo_item.id), 
method: :delete, data: { confirm: "Are you sure?" } %>

这是我在 todo_lists 中的 show.html.erb 文件

<p id="notice"><%= notice %></p>

<p>
  <strong>Title:</strong>
  <%= @todo_list.title %>
</p>

<p>
  <strong>Description:</strong>
  <%= @todo_list.description %>
</p>

<div id="todo_items_wrapper">
  <%= render @todo_list.todo_items %>
  <div id="form">
    <%= render "todo_items/form" %>
  </div>
</div>

<%= link_to 'Edit', edit_todo_list_path(@todo_list) %> |
<%= link_to 'Back', todo_lists_path %>

这是我的 routes.rb 文件

Rails.application.routes.draw do
  resources :todo_lists do
    resources :todo_items
  end
  root "todo_lists#index"
end

我不确定还包括什么。感谢任何帮助,因为这是我第一次尝试创建 Rails 应用程序。

谢谢

这里要求的是我完整的控制器文件:

    class TodoItemsController < ApplicationController
    before_action :set_todo_list

    def create
      @todo_item = @todo_list.todo_items.create(todo_item_params)
      redirect_to @todo_list
    end

    def destroy
      @todo_item = @todo_list.todo_items.find(params[:id])  
      if @todo_item.destroy
        flash[:success] = "Todo List item was deleted."
      else
        flash[:error] = "Todo List item could not be deleted."
      end
      redirect_to @todo_list
    end

    private

    def set_todo_list
        @todo_list = TodoList.find(params[:todo_list_id])
    end

    def todo_item_params
        params[:todo_item].permit(:content)
    end
end

一旦我将以下代码添加到私有以上的控制器,这里的要求是我的错误消息:

   def show
    @todo_list = TodoList.find(params[:todo_list_id])
   end

错误信息:

Missing template todo_items/show, application/show with {:locale=>[:en], 
:formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, 
:coffee, :jbuilder]}. Searched in: * 
"C:/Users/david/OneDrive/Documents/Ruby/todo/todo/app/views"


Posting error response when trying to delete when `show` method is included 
in controller:

Template is missing
Missing template todo_items/show, application/show with {:locale=>[:en], 
:formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, 
:coffee, :jbuilder]}. Searched in: * 
"C:/Users/david/OneDrive/Documents/Ruby/todo/todo/app/views"

Rails.root: C:/Users/david/OneDrive/Documents/Ruby/todo/todo

Application Trace | Framework Trace | Full Trace
actionview (4.2.8) lib/action_view/path_set.rb:46:in `find'
actionview (4.2.8) lib/action_view/lookup_context.rb:121:in `find'
C:in `find_template'
actionview (4.2.8) lib/action_view/renderer/template_renderer.rb:40:in `determine_template'
actionview (4.2.8) lib/action_view/renderer/template_renderer.rb:8:in `render'
actionview (4.2.8) lib/action_view/renderer/renderer.rb:46:in `render_template'
actionview (4.2.8) lib/action_view/renderer/renderer.rb:27:in `render'
actionview (4.2.8) lib/action_view/rendering.rb:100:in `_render_template'
actionpack (4.2.8) lib/action_controller/metal/streaming.rb:217:in `_render_template'
actionview (4.2.8) lib/action_view/rendering.rb:83:in `render_to_body'
actionpack (4.2.8) lib/action_controller/metal/rendering.rb:32:in `render_to_body'
actionpack (4.2.8) lib/action_controller/metal/renderers.rb:37:in `render_to_body'
actionpack (4.2.8) lib/abstract_controller/rendering.rb:25:in `render'
actionpack (4.2.8) lib/action_controller/metal/rendering.rb:16:in `render'
actionpack (4.2.8) lib/action_controller/metal/instrumentation.rb:44:in `block (2 levels) in render'
activesupport (4.2.8) lib/active_support/core_ext/benchmark.rb:12:in `block in ms'
C:/Ruby22/lib/ruby/2.2.0/benchmark.rb:303:in `realtime'
activesupport (4.2.8) lib/active_support/core_ext/benchmark.rb:12:in `ms'
actionpack (4.2.8) lib/action_controller/metal/instrumentation.rb:44:in `block in render'
actionpack (4.2.8) lib/action_controller/metal/instrumentation.rb:87:in `cleanup_view_runtime'
activerecord (4.2.8) lib/active_record/railties/controller_runtime.rb:25:in `cleanup_view_runtime'
actionpack (4.2.8) lib/action_controller/metal/instrumentation.rb:43:in `render'
actionpack (4.2.8) lib/action_controller/metal/implicit_render.rb:10:in `default_render'
actionpack (4.2.8) lib/action_controller/metal/implicit_render.rb:5:in `send_action'
actionpack (4.2.8) lib/abstract_controller/base.rb:198:in `process_action'
actionpack (4.2.8) lib/action_controller/metal/rendering.rb:10:in `process_action'
actionpack (4.2.8) lib/abstract_controller/callbacks.rb:20:in `block in process_action'
activesupport (4.2.8) lib/active_support/callbacks.rb:117:in `call'
activesupport (4.2.8) lib/active_support/callbacks.rb:117:in `call'
activesupport (4.2.8) lib/active_support/callbacks.rb:555:in `block (2 levels) in compile'
activesupport (4.2.8) lib/active_support/callbacks.rb:505:in `call'
activesupport (4.2.8) lib/active_support/callbacks.rb:505:in `call'
activesupport (4.2.8) lib/active_support/callbacks.rb:92:in `__run_callbacks__'
activesupport (4.2.8) lib/active_support/callbacks.rb:778:in `_run_process_action_callbacks'
activesupport (4.2.8) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (4.2.8) lib/abstract_controller/callbacks.rb:19:in `process_action'
actionpack (4.2.8) lib/action_controller/metal/rescue.rb:29:in `process_action'
actionpack (4.2.8) lib/action_controller/metal/instrumentation.rb:32:in `block in process_action'
activesupport (4.2.8) lib/active_support/notifications.rb:164:in `block in instrument'
activesupport (4.2.8) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activesupport (4.2.8) lib/active_support/notifications.rb:164:in `instrument'
actionpack (4.2.8) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
actionpack (4.2.8) lib/action_controller/metal/params_wrapper.rb:250:in `process_action'
activerecord (4.2.8) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
actionpack (4.2.8) lib/abstract_controller/base.rb:137:in `process'
actionview (4.2.8) lib/action_view/rendering.rb:30:in `process'
actionpack (4.2.8) lib/action_controller/metal.rb:196:in `dispatch'
actionpack (4.2.8) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
actionpack (4.2.8) lib/action_controller/metal.rb:237:in `block in action'
actionpack (4.2.8) lib/action_dispatch/routing/route_set.rb:74:in `call'
actionpack (4.2.8) lib/action_dispatch/routing/route_set.rb:74:in `dispatch'
actionpack (4.2.8) lib/action_dispatch/routing/route_set.rb:43:in `serve'
actionpack (4.2.8) lib/action_dispatch/journey/router.rb:43:in `block in serve'
actionpack (4.2.8) lib/action_dispatch/journey/router.rb:30:in `each'
actionpack (4.2.8) lib/action_dispatch/journey/router.rb:30:in `serve'
actionpack (4.2.8) lib/action_dispatch/routing/route_set.rb:817:in `call'
rack (1.6.8) lib/rack/etag.rb:24:in `call'
rack (1.6.8) lib/rack/conditionalget.rb:25:in `call'
rack (1.6.8) lib/rack/head.rb:13:in `call'
actionpack (4.2.8) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
actionpack (4.2.8) lib/action_dispatch/middleware/flash.rb:260:in `call'
rack (1.6.8) lib/rack/session/abstract/id.rb:225:in `context'
rack (1.6.8) lib/rack/session/abstract/id.rb:220:in `call'
actionpack (4.2.8) lib/action_dispatch/middleware/cookies.rb:560:in `call'
activerecord (4.2.8) lib/active_record/query_cache.rb:36:in `call'
activerecord (4.2.8) lib/active_record/connection_adapters/abstract/connection_pool.rb:653:in `call'
activerecord (4.2.8) lib/active_record/migration.rb:377:in `call'
actionpack (4.2.8) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
activesupport (4.2.8) lib/active_support/callbacks.rb:88:in `__run_callbacks__'
activesupport (4.2.8) lib/active_support/callbacks.rb:778:in `_run_call_callbacks'
activesupport (4.2.8) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (4.2.8) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
actionpack (4.2.8) lib/action_dispatch/middleware/reloader.rb:73:in `call'
actionpack (4.2.8) lib/action_dispatch/middleware/remote_ip.rb:78:in `call'
actionpack (4.2.8) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
web-console (2.3.0) lib/web_console/middleware.rb:28:in `block in call'
web-console (2.3.0) lib/web_console/middleware.rb:18:in `catch'
web-console (2.3.0) lib/web_console/middleware.rb:18:in `call'
actionpack (4.2.8) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.2.8) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.2.8) lib/rails/rack/logger.rb:20:in `block in call'
activesupport (4.2.8) lib/active_support/tagged_logging.rb:68:in `block in tagged'
activesupport (4.2.8) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (4.2.8) lib/active_support/tagged_logging.rb:68:in `tagged'
railties (4.2.8) lib/rails/rack/logger.rb:20:in `call'
actionpack (4.2.8) lib/action_dispatch/middleware/request_id.rb:21:in `call'
rack (1.6.8) lib/rack/methodoverride.rb:22:in `call'
rack (1.6.8) lib/rack/runtime.rb:18:in `call'
activesupport (4.2.8) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
rack (1.6.8) lib/rack/lock.rb:17:in `call'
actionpack (4.2.8) lib/action_dispatch/middleware/static.rb:120:in `call'
rack (1.6.8) lib/rack/sendfile.rb:113:in `call'
railties (4.2.8) lib/rails/engine.rb:518:in `call'
railties (4.2.8) lib/rails/application.rb:165:in `call'
rack (1.6.8) lib/rack/lock.rb:17:in `call'
rack (1.6.8) lib/rack/content_length.rb:15:in `call'
rack (1.6.8) lib/rack/handler/webrick.rb:88:in `service'
C:/Ruby22/lib/ruby/2.2.0/webrick/httpserver.rb:138:in `service'
C:/Ruby22/lib/ruby/2.2.0/webrick/httpserver.rb:94:in `run'
C:/Ruby22/lib/ruby/2.2.0/webrick/server.rb:294:in `block in start_thread'
Request

Parameters:

{"todo_list_id"=>"1",
 "id"=>"1"}

【问题讨论】:

  • 请出示您的完整控制器,您必须有show 操作和show.html.erb 才能使redirect_to @todo_list 工作。
  • 感谢您的评论@Gerry 我已经添加了完整的控制器。我尝试添加一个“显示”方法,但这给了我一个缺少模板的错误。
  • 我刚刚查看了入门教程,它更多地是关于消息和 cmets。不是真正的totolists。无论如何,你应该在你的 TodoListcontroller 中有一个显示操作,因为你已经有一个显示视图:show.html.erb.. 你没有跳过一步吗?
  • 您能添加完整的日志/错误吗?在出现错误之前确认 show 操作到位。
  • 您的link_to 很好。我怀疑 jquery 未正确安装在您的应用中。

标签: jquery ruby-on-rails ruby


【解决方案1】:

所以它通过查看 application.html.rb 文件解决了这个问题。

我换了:

%= stylesheet_link_tag :default, media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag :default %>

到:

%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'application' %>

一切正常。

感谢大家的帮助。

【讨论】:

    【解决方案2】:

    您能否检查该项目是否被正确删除?如果它没有被删除,那么: 我认为您需要一个“表单”而不是 link_to。

    link_to 创建一个&lt;a&gt; 标记,如果我没记错的话,将不允许您正确执行“删除”。

    使用:form_for @YOUROBJECT, method: :delete do |f|

    这就是为什么它说它没有在控制器上找到“显示”操作,因为没有删除方法的todo_list_todo_item_path 的路径是“显示”的路径。

    另一种方法是使用 Ajax 请求。

    如果它被正确删除:

    您缺少控制器中的动作正确控制器的相应视图。仔细检查,因为它们是嵌套资源,您可能将显示视图放置在错误的位置。

    【讨论】:

    • 在我正在关注的教程 (youtube.com/…) 中,link_to 用于删除 todo_item。
    • 另外,该项目没有被删除。
    • 当您点击“删除”时,请从终端/服务器输出。
    • @michael-nussbaumer 我现在已将其添加到我的帖子中。
    • @haletothewood 确实,您似乎首先需要弄清楚为什么您的 application.js / jquery 没有按照 nmeylan 的建议加载。另一种方法是使用表单而不是 link_to。
    【解决方案3】:

    您的application.js 文件似乎没有加载。

    <%= link_to 'Delete', todo_list_todo_item_path(@todo_list, todo_item.id), method: :delete, data: { confirm: "Are you sure?" } %>是删除一条记录的正确方法(如果路由正确的话)

    您确定 application.js 已加载吗?

    method: :delete 被 jquery_ujs 挂钩,以将您的链接转换为将发送http DELETE 的 ajax 链接。 因此,如果 application.js 未正确加载,您的链接将表现为http GET 链接以显示操作。

    【讨论】:

    • 我已经检查过了,application.js 文件在 app\assests\javascripts 中,//= require jquery//= require jquery_ujs 都在里面。我不确定我还能做什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 2022-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多