我有一个用devise,omniauth和cancan在Rails 3.2.13中开发的应用程序。在我开始使用cancan进行授权之前,一切都工作得很好。更有趣的是,cancan本身就像魅力一样工作,但是在编辑由devise提供的用户配置文件时会产生错误。如果康康完全能做到这一点,我真的不确定。
错误消息是:
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链接到其他控制器之外,别无其他。
这如何打破devise的“编辑个人资料”功能?
看看这个问题:Rails没有路线匹配{:controller =>“ devise / products”}
基本上,您在device
名称空间中,并且必须使用路径助手:
<%= link_to 'Posts', posts_path %>
或者:
<%= link_to 'Posts', :controller => '/posts', :action => :index %>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句