【问题标题】:CanCanCan - defining abilities & syntaxCanCanCan - 定义能力和语法
【发布时间】:2015-11-26 07:03:43
【问题描述】:

我正在使用 Rails 4、Devise、Role Model 和 CanCanCan 来制作应用程序。

我正在尝试在我的能力.rb 中定义能力。

我正在尝试以下方法:

  can :read, Project, {:active => true, :closed => false  &&  Project.sweep.disclosure.allusers => true}

但是,我在上面的行中遇到语法错误:

syntax error, unexpected =>, expecting '}'
...ct.sweep.disclosure.allusers => true}

我尝试将 => 替换为 :true,但在这种情况下出现语法错误:

syntax error, unexpected tSYMBEG, expecting '}'
...ect.sweep.disclosure.allusers :true}

我也试过把冒号放在属性的开头,在这种情况下我得到这个错误:

syntax error, unexpected =>, expecting '}'
...ct.sweep.disclosure.allusers => true}

我想不出更多的方法来尝试这个。

我要测试的相关属性位于一个名为 Disclosure.rb 的模型中。该模型属于一个名为 Sweep.rb 的模型。 Sweep 属于一个名为 Project.rb 的模型。

我不知道如何定义能力,这些错误让我筋疲力尽。有谁知道如何使用 CanCanCan 来定义能力,如果是,请您看看我在定义决定该用户是否可以看到这些项目的属性时做错了什么?

【问题讨论】:

  • CanCanCan wiki 表示不再支持 metawhere。您是否尝试将&& Project.sweep.disclosure.allusers => true 替换为:sweep => { :disclosure => { :allusers => true } }
  • 你会有这样的{:active => true, :closed => false, :sweep => { :disclosure => { :allusers => true } } }
  • 谢谢Kinaan。我不知道 metawhere 是什么。你的解决方案奏效了。谢谢
  • 很高兴听到这个消息。让我将其添加为答案,以便您将其标记为正确。

标签: ruby-on-rails cancan cancancan


【解决方案1】:

如 cmets 中所述,您应该使用类似

{:active => true, :closed => false, :sweep => { :disclosure => { :allusers => true } } }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 2015-11-25
    相关资源
    最近更新 更多