【问题标题】:ActionController::UrlGenerationError in Devise::Sessions#new设计中的 ActionController::UrlGenerationError::Sessions#new
【发布时间】:2016-10-30 16:09:16
【问题描述】:

我使用导航栏(使用 rails 上的设计;包含在我的 dashboard.html.erb 中)在登录时工作正常;但是,当想在所有页面中使用它并将其包含在 application.html.erb 中时,我收到此错误:ActionController::UrlGenerationError in Devise::Sessions#new

附加信息:“没有路线匹配 {:action=>"index", :controller=>"devise/users"}"

这是我的路线.rb:

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

我应该如何在 DRY 之后在 Rails 中实现这一点? (我是 Rails 新手)

这是我的导航栏:

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

【问题讨论】:

    标签: ruby-on-rails-4 devise


    【解决方案1】:

    我假设您在这里为 link_to 助手使用了错误的参数:

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

    试试这个:

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

    或者,如果你想指出实际控制人:

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

    有关link_to 的更多信息,请访问here

    希望对你有帮助。

    更新

    是的,当然,你可以做下一个:

    <% 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 %>
    

    【讨论】:

    • 部分,现在出现下一个错误;需要使菜单项以已登录为条件。建议?找到它:如果 user_signed_in?
    • 是的,你是对的。你可以使用user_signed_in?helper
    • 这是这样做的方法吗?或者以不同的方式问 - 条目菜单取决于是否已登录,但也取决于(要实施(尚不知道如何)授权(对象等的 CRUD)?有什么建议可以不重复执行此操作吗?
    • 我明白了。不幸的是,如果不重复条件,就无法呈现该菜单。您可以将所有菜单移动到部分菜单中,然后仅渲染部分菜单。这种方法将使您的布局保持干净,并且它也是某种干燥
    猜你喜欢
    • 2018-05-12
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多