【问题标题】:How can i use ".has_role?" from Rolify within Tabulous?我如何使用“.has_role”?来自 Tabulous 中的 Rolify?
【发布时间】:2012-07-16 18:10:48
【问题描述】:

我有一个使用 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 行仅指向 applications.html 文件中的 =tabs 调用。

我知道问题在于/users/sign_in 无法访问.has_role? 函数。

我怎样才能让tabulous.rb文件可以使用它?

【问题讨论】:

    标签: ruby-on-rails devise cancan


    【解决方案1】:

    我已经尝试过这段代码并且成功了!

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 感谢@Karen 的回复。不久前,我通过重新评估用户的可访问性解决了这个问题。
      【解决方案3】:

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

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

      current_user在用户退出时没有定义,所以如果确实定义了current_user,你还需要检查tabulous.rb文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-23
        • 1970-01-01
        • 2012-02-05
        • 2021-10-05
        相关资源
        最近更新 更多