【发布时间】:2015-12-01 07:01:21
【问题描述】:
我正在尝试使用 CanCanCan 在我的 Rails 4 应用程序中定义能力。
我的ability.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
(所以外层是方括号而不是大括号) - 我不再在那条线上停下来了。我真的不明白为什么会这样(并且还没有在种子数据上测试过),但它已经阻止了错误的抛出。
谢谢
【问题讨论】:
-
我想知道 CanCanCan 是否在表示块的花括号和表示哈希的花括号之间存在某种混淆。您可以在没有花括号的情况下传递哈希,所以为什么不尝试一下(它是 CanCanCan 文档中显示的形式)。并将所有代码放在一行中,看看会发生什么。我自己只使用过块样式条件。另一种方法是为每个条件设置一个单独的 can :read,这会将条件 OR 在一起。
-
嗨,我试着去掉外花括号。我在 wiki 中找不到具有多个条件的示例(所以不确定这是否是您的想法??)。我希望到期日期和扫描都是真实的,以便能够工作。
标签: ruby-on-rails cancan cancancan