我在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链接之外别无其他。
这如何破坏设计的“编辑个人资料”功能?
答案 0 :(得分:1)
查看此问题:Rails No route matches {:controller=>"devise/products"}
基本上你在device
命名空间中,你必须使用路径助手:
<%= link_to 'Posts', posts_path %>
或:
<%= link_to 'Posts', :controller => '/posts', :action => :index %>