0

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

在我的tabulous.rb文件中,我希望能够Visibility?通过调用来定义选项卡:

(current_user.has_role? :admin)

所以config.tabsdo 看起来像这样:

# 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文件可以使用它?

4

3 回答 3

2

我已经尝试过这段代码并且工作了!

config.tabs do
  showTab = (current_user && (current_user.has_role? :admin))
  [
    [ :users_tab, "Users", users_path, showTab, showTab],
  ]
end
于 2012-11-23T11:53:32.613 回答
0

如果我没记错的话,tabulous 在生产模式下缓存 tabulous.rb,所以虽然你的方法可能在开发中的大部分时间都有效,但它会在生产中中断,每个人最终都会得到相同的选项卡,一种方式或其他。

于 2012-08-01T16:35:08.093 回答
0

可以在 `tabulous.rb 文件中完成一个简单的修复

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

current_usertabulous.rb用户退出时未定义,因此如果确实有定义,您还需要签入文件current_user

于 2012-11-14T04:21:18.650 回答