Ruby on rails 我怎样才能使用“;。有“U角色”吗;从Rolify到Tabulous?

Ruby on rails 我怎样才能使用“;。有“U角色”吗;从Rolify到Tabulous?,ruby-on-rails,devise,cancan,Ruby On Rails,Devise,Cancan,我有一个应用程序,使用Rolify、design、CanCan和Tabulous 在我的tabulous.rb文件中,我希望能够通过调用以下命令来定义选项卡的可见性?: (current_user.has_role? :admin) 因此,config.tabsdo将如下所示: # TAB NAME | DISPLAY TEXT | PATH | VISIBILE? | ENABLED? [ :admin_tab, 'ADMIN' , ingredients_path , (current_u

我有一个应用程序,使用Rolify、design、CanCan和Tabulous

在我的
tabulous.rb
文件中,我希望能够通过调用以下命令来定义选项卡的
可见性?

(current_user.has_role? :admin)
因此,
config.tabs
do将如下所示:

# TAB NAME | DISPLAY TEXT | PATH | VISIBILE? | ENABLED?
[ :admin_tab, 'ADMIN' , ingredients_path , (current_user.has_role? :admin) , true ],
除了进入路径中的/users/sign_外,它对大多数页面都适用;它返回以下错误:

NoMethodError in Devise/sessions#new

Showing /Users/[myname]/Projects/[project-name]/app/views/layouts/application.html.haml where line #24 raised:

undefined method `has_role?' for nil:NilClass
第24行只指向
applications.html
文件中的
=tabs
调用

我知道问题在于
/users/sign\u in
无法访问
.has\u角色?
功能


我该如何制作才能让
tabulus.rb
文件使用它呢?

如果我没有弄错的话,tabulus在生产模式下会缓存tabulus.rb,所以虽然您的方法在开发过程中大部分时间都有效,但在生产过程中会出现故障,每个人最终都会得到相同的选项卡,不管怎样。

可以在`tabulus.rb文件中进行简单的修复

[:admin_tab, 'Admin', users_path, current_user && current_user.has_role?(:admin), true],

current\u user
在用户注销时未定义,因此如果确实定义了
current\u user
,则还需要签入
tabulous.rb
文件。

我已经尝试了此代码并成功

config.tabs do
  showTab = (current_user && (current_user.has_role? :admin))
  [
    [ :users_tab, "Users", users_path, showTab, showTab],
  ]
end

谢谢你的回复@Karen。不久前,我通过重新评估用户的可访问性来解决这个问题。