2015-09-05 43 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