繁体   English   中英

对于Rails来说是非常新的东西,并且遵循“入门指南”(创建博客)中的destroy方法给了我一个错误

[英]Very new to Rails and following the Getting Started tutorial (creating a Blog) destroy method is giving me an error

我已经阅读了很多有关此问题的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

这是_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应用程序。

谢谢

根据要求,这里是我完整的Controller文件:

    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"}

因此,它通过进入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' %>

一切正常。

感谢您的所有帮助。

您可以检查项目是否被正确删除吗? 如果未删除,则:我认为您需要一个“表单”而不是link_to。

link_to创建一个<a>标记,如果我没记错的话,将不允许您正确执行“删除”操作。

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

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

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

如果正确删除了它:

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

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

<%= link_to 'Delete', todo_list_todo_item_path(@todo_list, todo_item.id), method: :delete, data: { confirm: "Are you sure?" } %> <%= 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钩住,以将您的链接转换为ajax链接,该链接将发送http DELETE 因此,如果未正确加载application.js,则您的链接的行为将类似于http GET链接,以显示操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM