2011-07-27 20 views
0

如果我有這樣的:Rails CanCan,失敗,除非我有一個Rails.logger.info ---爲什麼?

can [:manage], GroupMember do |group_member| 
    wall_member.try(:user_id) == current_user.id 
    Rails.logger.info 'XXXX' 
end 

慘慘工作正常,但如果我刪除了記錄儀,它失敗:

can [:manage], GroupMember do |group_member| 
    wall_member.try(:user_id) == current_user.id 
end 

任何想法發生了什麼事情在這裏的康康舞?或我的代碼? :)謝謝

回答

4

fine manual

如果條件哈希不給你過定義能力足夠的控制,你可以用任何你想要的Ruby代碼一起使用塊。

can :update, Project do |project| 
    project.groups.include?(user.group) 
end 

如果塊返回true,那麼用戶有:該項目更新能力,否則他將被拒絕訪問。使用塊的缺點是不能用於爲數據庫查詢生成條件。

你的第一個塊:

can [:manage], GroupMember do |group_member| 
    wall_member.try(:user_id) == current_user.id 
    Rails.logger.info 'XXXX' 
end 

總是返回真值,因爲Rails.logger.info 'XXXX'回報"XXXX\n"info僅僅是add的包裝,你必須閱讀源代碼,看看有什麼add回報,因爲它ISN沒有很好的記錄)。如果沒有Rails.logger.info呼叫,塊剛剛返回:

wall_member.try(:user_id) == current_user.id 

而且必須是要假的。

相關問題