我已经阅读了很多关于这个问题的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中的destroy方法
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
这是我的删除&#39;链接_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
一旦我将以下代码添加到private上方的控制器,这里请求的是我的错误消息:
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"}
答案 0 :(得分: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' %>
一切正常。
感谢您的帮助。
答案 1 :(得分:0)
您可以检查项目是否被正确删除?如果它没有被删除,那么: 我认为你需要一个&#34;形式&#34;而不是link_to。
link_to会创建一个<a>
代码,如果我没有弄错,您可以正确地执行&#34;删除&#34;。
使用:form_for @YOUROBJECT, method: :delete do |f|
这就是为什么它说它没有找到&#34; show&#34;控制器上的操作,因为todo_list_todo_item_path
没有删除方法的路径是&#34; show&#34;的路径。
另一种方法是使用Ajax请求。
您错过了控制器中的操作以及相应的正确控制器视图。仔细检查,因为他们已经嵌套了资源,您可能会将节目视图放在错误的位置。
答案 2 :(得分:0)
您的application.js
文件似乎未加载。
<%= link_to 'Delete', todo_list_todo_item_path(@todo_list, todo_item.id),
method: :delete, data: { confirm: "Are you sure?" } %>
删除记录的正确方法(如果路线正确)
您确定已加载application.js
吗?
jquery_ujs将method: :delete
挂钩,将您的链接转换为将发送http DELETE
的ajax链接。
因此,如果未正确加载application.js,您的链接就会像http GET
链接一样显示操作。