2012-08-29 52 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