1

This seems to be a common issue, I have tried a couple solutions and am getting an unexpected issue. The goal is to create a page that admins can edit the permissions on and delete user accounts. routes:

devise_for :users, controllers: { registrations: 'users/registrations'}
get '/login', to: 'sessions#new'
match '/users',   to: 'users#index',   via: 'get'
match '/users/makeAdmin',   to: 'users#makeAdmin',   via: 'get', :as => :users_makeAdmin
match '/users/revokeAdmin',   to: 'users#revokeAdmin',   via: 'get'
match 'users/:id' => 'users#destroy', :via => :delete, :as => :admin_destroy_user
match 'users/:id' => 'users#show', via: 'get', as: :user
resources :users

users_controller.rb

class UsersController < ApplicationController
  def index
  end

  def makeAdmin
    @user = User.find(params[:id])
    @user.update(admin: true)
    redirect_to users_index_path
  end

  def revokeAdmin
    @user = User.find(params[:id])
    @user.update(admin: false)
    redirect_to users_index_path
  end

  def show
    @user = User.find(params[:id])
  end

  def destroy
    @user = User.find(params[:id])
    @user.destroy

    if @user.destroy
        redirect_to users_index_path, notice: "User deleted."
    end
  end
end

users/index.html.erb

<style>
.button_to {
    display: inline;
}
.evenrow {
    background-color: #eee;
}
</style>
<script type="text/javascript">
function alert() {
    alert("The paragraph was clicked.");
}
</script>
<h1>All Users</h1>

<ul class="list-group" style="padding: 0em 10% 0em 10%;">
    <li class="list-group-item" style="background-color: #428bca; border-color: #357ebd;; color: #fff;">
        <div class="row">
            <div class="col-md-3">
                <b>User Email</b>
            </div>
            <div class="col-md-3">
                <b>User Name</b>
            </div>
            <div class="col-md-1">
                <b>Admin</b>
            </div>
            <div class="col-md-5">
                <b>Controls</b>
            </div>
        </div>
    </li>
    <%@users = User.all%>
    <% @users.each do |user| %>
    <li class="list-group-item">
        <div class="row">
            <div class="col-md-3">
                <%= user.email %>
            </div>
            <div class="col-md-3">
                <%= user.name %>
            </div>
            <div class="col-md-1">
                <%= user.admin %>
            </div>
            <div class="col-md-5">
                <% if user.admin %><%= link_to 'Revoke Admin', users_revokeAdmin_path(id: user.id), class: "btn btn-primary btn-md" %><% else %><%= link_to 'Make Admin', users_makeAdmin_path(id: user.id), class: "btn btn-primary btn-md" %><% end %>
                | <%= link_to "Destroy", admin_destroy_user_path(user), method: :delete, data: { confirm: "You sure?" }, class: "btn btn-primary btn-md" %>
            </div>
        </div>
    </li>
    <% end %>
</ul>

When I hit the destroy button for a user I get an error that says

Template is missing
Missing template users/show, application/show with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in: * "/home/student/SLP/rca/app/views" * "/home/student/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/devise-4.2.0/app/views"

I haven't seen this mentioned in any other questions dealing with this, any help is appreciated. Edit: here is the stack since someone asked.

actionview (4.2.6) lib/action_view/path_set.rb:46:in `find'
actionview (4.2.6) lib/action_view/lookup_context.rb:121:in `find'
actionview (4.2.6) lib/action_view/renderer/abstract_renderer.rb:18:in `find_template'
actionview (4.2.6) lib/action_view/renderer/template_renderer.rb:40:in `determine_template'
actionview (4.2.6) lib/action_view/renderer/template_renderer.rb:8:in `render'
actionview (4.2.6) lib/action_view/renderer/renderer.rb:46:in `render_template'
actionview (4.2.6) lib/action_view/renderer/renderer.rb:27:in `render'
actionview (4.2.6) lib/action_view/rendering.rb:100:in `_render_template'
actionpack (4.2.6) lib/action_controller/metal/streaming.rb:217:in `_render_template'
actionview (4.2.6) lib/action_view/rendering.rb:83:in `render_to_body'
actionpack (4.2.6) lib/action_controller/metal/rendering.rb:32:in `render_to_body'
actionpack (4.2.6) lib/action_controller/metal/renderers.rb:37:in `render_to_body'
actionpack (4.2.6) lib/abstract_controller/rendering.rb:25:in `render'
actionpack (4.2.6) lib/action_controller/metal/rendering.rb:16:in `render'
actionpack (4.2.6) lib/action_controller/metal/instrumentation.rb:44:in `block (2 levels) in render'
activesupport (4.2.6) lib/active_support/core_ext/benchmark.rb:12:in `block in ms'
/home/student/.rbenv/versions/2.3.1/lib/ruby/2.3.0/benchmark.rb:308:in `realtime'
activesupport (4.2.6) lib/active_support/core_ext/benchmark.rb:12:in `ms'
actionpack (4.2.6) lib/action_controller/metal/instrumentation.rb:44:in `block in render'
actionpack (4.2.6) lib/action_controller/metal/instrumentation.rb:87:in `cleanup_view_runtime'
activerecord (4.2.6) lib/active_record/railties/controller_runtime.rb:25:in `cleanup_view_runtime'
actionpack (4.2.6) lib/action_controller/metal/instrumentation.rb:43:in `render'
actionpack (4.2.6) lib/action_controller/metal/implicit_render.rb:10:in `default_render'
actionpack (4.2.6) lib/action_controller/metal/implicit_render.rb:5:in `send_action'
actionpack (4.2.6) lib/abstract_controller/base.rb:198:in `process_action'
actionpack (4.2.6) lib/action_controller/metal/rendering.rb:10:in `process_action'
actionpack (4.2.6) lib/abstract_controller/callbacks.rb:20:in `block in process_action'
activesupport (4.2.6) lib/active_support/callbacks.rb:117:in `call'
activesupport (4.2.6) lib/active_support/callbacks.rb:555:in `block (2 levels) in compile'
activesupport (4.2.6) lib/active_support/callbacks.rb:505:in `call'
activesupport (4.2.6) lib/active_support/callbacks.rb:92:in `__run_callbacks__'
activesupport (4.2.6) lib/active_support/callbacks.rb:778:in `_run_process_action_callbacks'
activesupport (4.2.6) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (4.2.6) lib/abstract_controller/callbacks.rb:19:in `process_action'
actionpack (4.2.6) lib/action_controller/metal/rescue.rb:29:in `process_action'
actionpack (4.2.6) lib/action_controller/metal/instrumentation.rb:32:in `block in process_action'
activesupport (4.2.6) lib/active_support/notifications.rb:164:in `block in instrument'
activesupport (4.2.6) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activesupport (4.2.6) lib/active_support/notifications.rb:164:in `instrument'
actionpack (4.2.6) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
actionpack (4.2.6) lib/action_controller/metal/params_wrapper.rb:250:in `process_action'
activerecord (4.2.6) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
actionpack (4.2.6) lib/abstract_controller/base.rb:137:in `process'
actionview (4.2.6) lib/action_view/rendering.rb:30:in `process'
actionpack (4.2.6) lib/action_controller/metal.rb:196:in `dispatch'
actionpack (4.2.6) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
actionpack (4.2.6) lib/action_controller/metal.rb:237:in `block in action'
actionpack (4.2.6) lib/action_dispatch/routing/route_set.rb:74:in `dispatch'
actionpack (4.2.6) lib/action_dispatch/routing/route_set.rb:43:in `serve'
actionpack (4.2.6) lib/action_dispatch/journey/router.rb:43:in `block in serve'
actionpack (4.2.6) lib/action_dispatch/journey/router.rb:30:in `each'
actionpack (4.2.6) lib/action_dispatch/journey/router.rb:30:in `serve'
actionpack (4.2.6) lib/action_dispatch/routing/route_set.rb:817:in `call'
warden (1.2.6) lib/warden/manager.rb:35:in `block in call'
warden (1.2.6) lib/warden/manager.rb:34:in `catch'
warden (1.2.6) lib/warden/manager.rb:34:in `call'
rack (1.6.4) lib/rack/etag.rb:24:in `call'
rack (1.6.4) lib/rack/conditionalget.rb:25:in `call'
rack (1.6.4) lib/rack/head.rb:13:in `call'
actionpack (4.2.6) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
actionpack (4.2.6) lib/action_dispatch/middleware/flash.rb:260:in `call'
rack (1.6.4) lib/rack/session/abstract/id.rb:225:in `context'
rack (1.6.4) lib/rack/session/abstract/id.rb:220:in `call'
actionpack (4.2.6) lib/action_dispatch/middleware/cookies.rb:560:in `call'
activerecord (4.2.6) lib/active_record/query_cache.rb:36:in `call'
activerecord (4.2.6) lib/active_record/connection_adapters/abstract/connection_pool.rb:653:in `call'
activerecord (4.2.6) lib/active_record/migration.rb:377:in `call'
actionpack (4.2.6) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
activesupport (4.2.6) lib/active_support/callbacks.rb:88:in `__run_callbacks__'
activesupport (4.2.6) lib/active_support/callbacks.rb:778:in `_run_call_callbacks'
activesupport (4.2.6) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (4.2.6) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
actionpack (4.2.6) lib/action_dispatch/middleware/reloader.rb:73:in `call'
actionpack (4.2.6) lib/action_dispatch/middleware/remote_ip.rb:78:in `call'
actionpack (4.2.6) 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.6) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.2.6) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.2.6) lib/rails/rack/logger.rb:20:in `block in call'
activesupport (4.2.6) lib/active_support/tagged_logging.rb:68:in `block in tagged'
activesupport (4.2.6) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (4.2.6) lib/active_support/tagged_logging.rb:68:in `tagged'
railties (4.2.6) lib/rails/rack/logger.rb:20:in `call'
actionpack (4.2.6) lib/action_dispatch/middleware/request_id.rb:21:in `call'
rack (1.6.4) lib/rack/methodoverride.rb:22:in `call'
rack (1.6.4) lib/rack/runtime.rb:18:in `call'
activesupport (4.2.6) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
rack (1.6.4) lib/rack/lock.rb:17:in `call'
actionpack (4.2.6) lib/action_dispatch/middleware/static.rb:120:in `call'
rack (1.6.4) lib/rack/sendfile.rb:113:in `call'
railties (4.2.6) lib/rails/engine.rb:518:in `call'
railties (4.2.6) lib/rails/application.rb:165:in `call'
rack (1.6.4) lib/rack/lock.rb:17:in `call'
rack (1.6.4) lib/rack/content_length.rb:15:in `call'
rack (1.6.4) lib/rack/handler/webrick.rb:88:in `service'
/home/student/.rbenv/versions/2.3.1/lib/ruby/2.3.0/webrick/httpserver.rb:140:in `service'
/home/student/.rbenv/versions/2.3.1/lib/ruby/2.3.0/webrick/httpserver.rb:96:in `run'
/home/student/.rbenv/versions/2.3.1/lib/ruby/2.3.0/webrick/server.rb:296:in `block in start_thread'
newtothis
  • 23
  • 4
  • could you post your server logs? when you hit destroy. – angkiki Dec 13 '16 at 04:39
  • @angkiki I updated the question, is that what you were looking for? – newtothis Dec 13 '16 at 05:16
  • Yup is that. But could you post the portion from the time when you click the delete button? – angkiki Dec 13 '16 at 05:19
  • @angkiki Not sure I know what you mean? When I hit the delete button I get the error page with that info, is there something else I should be doing? – newtothis Dec 13 '16 at 05:24
  • The error page with that info is in your browser right? The server logs will show the action of hitting the delete button, what it is trying to render next followed by the error that is getting thrown. The error you are receiving now is that it is trying to show the users/show.html.erb page but you do not have that template. Have you created the view for that page yet? – angkiki Dec 13 '16 at 05:31
  • That would be the rookie mistake I made. Thanks for the help @angkiki, I appreciate it. – newtothis Dec 13 '16 at 05:41
  • No worries. Good luck :) – angkiki Dec 13 '16 at 05:44

1 Answers1

1

The reason you're hitting a no template error is because if @user.destroy is false since you've already destroyed the user in the line above. Therefore redirect_to users_index_path never happens and it's looking for a destroy template.

Change your code to:

def destroy
  @user = User.find(params[:id])

  if @user.destroy
    redirect_to users_index_path, notice: "User deleted."
  else
    redirect_to users_index_path, flash: { error: "User could not be deleted." }
  end
end
luckyruby
  • 273
  • 1
  • 7