【发布时间】:2013-12-25 21:26:04
【问题描述】:
我在 Rails 3.2.13 中使用 devise、omniauth 和 cancan 开发了一个应用程序。在我开始使用 cancan 实现授权之前,这一切都运行良好。更有趣的是,cancan 本身就像 charm 一样,但在编辑 devise 提供的用户配置文件时会产生错误。如果 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 链接之外什么都没有。
这如何破坏设计的“编辑配置文件”功能?
【问题讨论】:
-
附加信息:如果我删除内部 ul 的第一个 li,错误消息将更改为“No route matches {:controller=>"devise/itests"}”,因此这两个链接会干扰设计...但是如何以及为什么?
标签: ruby-on-rails ruby devise ruby-on-rails-3.2 cancan