奇怪的错误阻止用户编辑设计配置文件

时间:2013-12-25 21:26:05

标签: ruby-on-rails ruby devise ruby-on-rails-3.2 cancan

我在Rails 3.2.13中正在开发一个带有devise,omniauth和cancan的应用程序。这一切都很完美,直到我开始用cancan实现授权。更有意思的是,cancan本身就像魅力一样,但在编辑设计提供的用户配置文件时会产生错误。如果cancan可以做到这一点,我真的不确定。

错误消息是:

No route matches {:controller=>"devise/posts"}

我有一个帖子控制器,但这与设计无关。这是故事中最奇怪的部分。

我成功地定位了生成它的地点,但我无法弄清楚问题的原因是什么以及如何解决它。所以我的菜单只显示在application.html.erb的管理员中,这是源代码:

<% if (user_signed_in? && (current_user.role?("sysadmin") || current_user.role?("postadmin") || current_user.role?("testadmin")))  %>

    <ul class="nav navbar-nav nav-pills">
        <li class="dropdown">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown" style="color: crimson;">
                <span class="glyphicon glyphicon-cog"></span> Administration <b class="caret"></b></a>
            <ul class="dropdown-menu">
                <% if (current_user.role?("sysadmin") || current_user.role?("postadmin")) then %>
                    <li><%= link_to 'Posts', :controller => :posts, :action => :index %></li>
                <% end %>
                <% if (current_user.role?("sysadmin") || current_user.role?("testadmin")) then %>
                    <li><%= link_to 'Itests', :controller => :itests, :action => :index %></li>
                <% end %>
            </ul>
        </li>
    </ul>

<% end %>

真正有趣的是,如果我删除<ul>...</ul>块以便只留下一个裸if ... end块,它就可以了。此外,它适用于没有三种管理员角色的用户。

但是在<ul>...</ul>块中除了HTML,Bootstrap样式和一些其他控制器的内联ruby链接之外别无其他。

这如何破坏设计的“编辑个人资料”功能?

1 个答案:

答案 0 :(得分:1)

查看此问题:Rails No route matches {:controller=>"devise/products"}

基本上你在device命名空间中,你必须使用路径助手:

<%= link_to 'Posts', posts_path %>

或:

<%= link_to 'Posts', :controller => '/posts', :action => :index %>