我怎样才能使用" .has_role?"来自Rolify in Tabulous?

时间:2012-07-16 18:10:49

标签: ruby-on-rails devise cancan

我有一个使用Rolify,Devise,CanCan和Tabulous的应用程序。

在我的tabulous.rb文件中,我希望能够通过调用以下内容来定义标签的Visibility?

(current_user.has_role? :admin)

所以config.tabs会看起来像这样:

# TAB NAME | DISPLAY TEXT | PATH | VISIBILE? | ENABLED?
[ :admin_tab, 'ADMIN' , ingredients_path , (current_user.has_role? :admin) , true ],

除了我进入/users/sign_in路径时,大多数页面的效果都很好;它返回以下错误:

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行只是指向=tabs文件中的applications.html来电。

我知道问题是/users/sign_in无法访问.has_role?功能。

我如何才能使tabulous.rb文件可以使用它?

3 个答案:

答案 0 :(得分:2)

我已经尝试过这段代码了!

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

答案 1 :(得分:0)

如果我没有弄错,那么在生产模式下,tabulous.rb会发布tabulous.rb,所以虽然你的方法在开发过程中大部分时间都可以正常工作,但它会在生产中中断,每个人最终会得到相同的标签,一个方式或其他。

答案 2 :(得分:0)

可以在`tabulous.rb文件

中完成一个简单的修复
[:admin_tab, 'Admin', users_path, current_user && current_user.has_role?(:admin), true],
用户退出时未定义

current_user,因此如果实际定义了tabulous.rb,您还需要检入current_user文件。