2012-08-29 51 views
0
康康舞能力

當定義在康康舞能力職業技能...導軌 - 定義使用協會

是這樣的:

can :manage, Area, :location => { :company => { :manager => { :user_id => user.id } } } 

與此相同:

can :manage, Area do |area| 
     area.location.company.manager.user_id == user.id 
end 

我只是試圖更好地理解定義一個能力,而不使用塊。一種方式比另一種更好(也許更快)?

+0

你爲什麼試圖在沒有阻擋的情況下做到這一點?速度差異(如果有的話)可以忽略不計,您發佈的第一種方式只是很難/難以理解/理解。 – deefour

+0

我同意第一個例子是醜陋的......而且難以閱讀。我很欣賞這一個班輪。但是,我在現實世界中都看到了這一點,只是想確保我瞭解正確的用法。 – hellion

回答

2

這兩者應該是相同的,但如果其他人正在閱讀您的代碼,第二種方法會更清晰。我肯定會推薦使用第二種方法。如果有什麼困擾你佔用了多條線路,你可以這樣寫:

can(:manage, Area) {|area| area.location.company.manager.user_id == user.id } 

這可能比其他兩個選項清潔劑(當與一堆其他的規則堆疊)。

+0

我感謝您的反饋。而且,我非常欣賞這個單線......再次感謝。 – hellion

+0

這個內膽示例中是否存在語法錯誤?我得到未定義的方法「區域」。然而,重寫塊,所以它不是一個班輪......工作正常。 – hellion

+0

哦,使用parens。我會更新答案。 – Andrew