2015-09-05 40 views
0

我正尝试使用CanCanCan在我的Rails 4应用程序中定义功能。Rails 4&CanCanCan - 语法

我在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 

(所以方括号,而不是大括号在外级) - 而且我不再停在那条线上。我真的不明白为什么这样做(并且还没有在种子数据上进行测试),但它已经阻止了被抛出的错误。

谢谢

+0

我不知道CanCanCan在表示块的大括号与表示散列的大括号之间有些混淆。你可以传递哈希而不用花括号,为什么不尝试呢(这是CanCanCan文档中显示的格式)。并将所有代码放入一行,看看会发生什么。我只用过自己的块风格条件。另一种方法是有一个单独的罐:为每个条件读取,这将或条件在一起。 – MarsAtomic

+0

嗨,我试图去除外部大括号。我在维基中找不到有多个条件的示例(因此不确定这是否是您的想法?)。我希望有效期限和清算对于工作能力都是正确的。 – Mel

回答

1

你有没有注意到你的

{:expiry_date > Time.now, 

代替

{:expiry_date => Time.now, 

注意的语法错误。

+0

嗨Tamer,我希望Time.now小于失效日期。你确定=>表示小于? – Mel