【问题标题】:Rails 4 & CanCanCan - syntaxRails 4 & CanCanCan - 语法
【发布时间】: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


【解决方案1】:

你有没有发现

{:expiry_date > Time.now,

而不是

{:expiry_date => Time.now,

注意语法错误。

【讨论】:

  • 您好 Tamer,我希望 Time.now 小于到期日期。您确定 => 表示小于吗?
猜你喜欢
  • 1970-01-01
  • 2015-11-30
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
  • 2015-11-27
  • 2015-11-26
  • 2015-12-12
  • 1970-01-01
相关资源
最近更新 更多