0

我正在尝试使用 CanCanCan 在我的 Rails 4 应用程序中定义能力。

我的能力.rb 文件中有这个能力:

can :read, Proposal, 
      { :expiry_date > Time.now, 
        :sweep => { :disclosure => { :allusers => true } } 
      }

syntax error, unexpected ',', expecting =>
      { :expiry_date > Time.now, 

当我尝试在 Time.now 之后删除逗号时,出现此错误:

syntax error, unexpected '\n', expecting =>
/Users/ml/f4/c2/app/models/ability.rb:107: syntax error, unexpected '}', expecting keyword_end

我不知道如何解读这些错误消息的含义以及它要我做什么。对于第一种格式,我不明白为什么用 => 替换逗号是正确的,因为需要针对该错误评估两个单独的属性。

对于第二个错误,我不明白为什么我会在那一点上“结束”,因为我有一长串需要进入课堂的其他能力。

我想知道这个错误是否与尝试使用 Time.now 参考有关。这不是能力文件中的有效功能吗?如果是这样,是否有其他方法可以查看属性中的日期是否晚于测试能力的日期?

当我尝试将其设置为块时,如下所示:

  can :read, Proposal do | prop |
  {:expiry_date > Time.now, 
    :sweep => { :disclosure => { :allusers => true } } 
  }
  end

我收到此错误:

syntax error, unexpected ',', expecting =>
      {:expiry_date > Time.now, 

然后我又被卡住了,因为我不知道把 =>

当我尝试删除外部花括号时,该块显示为:

can :read, Proposal do | prop |
      :expiry_date > Time.now, 
        :sweep => { :disclosure => { :allusers => true } } 

      end

我收到此错误:

syntax error, unexpected ',', expecting keyword_end
      :expiry_date > Time.now, 

所以,只是尝试随机的事情,我试图改变括号:

can :read, Proposal do | prop |
      [:expiry_date > Time.now & :sweep => { :disclosure => { :allusers => true } } ]
      end

(所以方括号而不是外层的花括号) - 我不再在那条线上停下来。我真的不明白为什么会这样(并且尚未在种子数据上对其进行测试),但它已经阻止了错误的抛出。

谢谢

4

1 回答 1

1

你有没有注意到你有

{:expiry_date > Time.now,

代替

{:expiry_date => Time.now,

注意语法错误。

于 2015-09-05T05:04:29.873 回答