我有一个使用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
文件可以使用它?
答案 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
文件。