0
votes

I use a nav bar (using devise on rails; included in my dashboard.html.erb) that works fine when logged in; however when wanting to use it in all pages and including it in the application.html.erb, I get this error: ActionController::UrlGenerationError in Devise::Sessions#new

additional info: "No route matches {:action=>"index", :controller=>"devise/users"}"

this is my route.rb:

  Rails.application.routes.draw do
  root 'dashboard#index'
  devise_for :users
  resources :users

How should I implement this in Rails following DRY? (am new to rails)

This is my navigation bar:

<nav class="navbar navbar-default navbar-fixed-top">
<div class="container">
    <div class="navbar-header">
    <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
    <span class="sr-only">Toggle navigation</span>
    <span class="icon-bar"></span>
    <span class="icon-bar"></span>
    <span class="icon-bar"></span>
    </button>
    <a class="navbar-brand"><%= Rails.application.class.parent_name %></a>
    </div>
<div class="navbar-collapse collapse">
    <ul class="nav navbar-nav">
        <li><%= link_to 'Dashboard', root_path %></li>
        <li><%= link_to 'Users', controller: 'users' %></li>
        <li><a href="#contact">Contact</a></li>
        <li class="dropdown">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
        <ul class="dropdown-menu">
            <li><p> You are logged in as <%= current_user.email %></p></li>
            <li><a href="#">Another action</a></li>
            <li><a href="#">Something else here</a></li>
            <li role="separator" class="divider"></li>
            <li class="dropdown-header">Nav header</li>
            <li><a href="#">Separated link</a></li>
            <li><a href="#">One more separated link</a></li>
        </ul>
        </li>
        </ul>
    <ul class="nav navbar-nav navbar-right">
        <li><%= link_to "Log out", destroy_user_session_path, method: :delete %></li>
        <li><%= link_to edit_user_registration_path do %><strong><%= current_user.first_name %></strong><% end %></li>
    </ul>
</div><!--/.nav-collapse -->
</div>

1

1 Answers

0
votes

I assume you're using wrong arguments for link_to helper here:

<li><%= link_to 'Users', controller: 'users' %></li>

try this one:

<li><%= link_to 'Users', users_path %></li>

or, if you would like to point actual controller:

<li><%= link_to 'Users', controller: 'users', action: 'index' %></li>

More info about link_to available here

Hope it helps.

UPDATE

Yes, sure, you can do the next:

<% if user_signed_in? %>
    <ul class="nav navbar-nav">
        <li><%= link_to 'Dashboard', root_path %></li>
        <li><%= link_to 'Users', controller: 'users' %></li>
        <li><a href="#contact">Contact</a></li>
        <li class="dropdown">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
            <ul class="dropdown-menu">
                <li><p> You are logged in as <%= current_user.email %></p></li>
                <li><a href="#">Another action</a></li>
                <li><a href="#">Something else here</a></li>
                <li role="separator" class="divider"></li>
                <li class="dropdown-header">Nav header</li>
                <li><a href="#">Separated link</a></li>
                <li><a href="#">One more separated link</a></li>
            </ul>
        </li>
    </ul>
<% else %>
    # do somethid else
<% end %>