Ruby on Rails 3编程问题

时间:2010-09-22 08:42:28

标签: ruby-on-rails-3

正确:

@teammates = Roster.all.sort_by(&:level)

失败:

@teammates = Roster.all.sort_by(:level)

&面前:水平吗?它是否像C ++中的引用一样?

提前致谢

1 个答案:

答案 0 :(得分:1)

&symbol符号是Rails添加的一些语法糖。它被称为符号to_proc,可用于任何期望接收Proc。

的方法

Array.sort_by需要一个proc,这就是传递符号失败的原因。符号to_proc语法为接收者安排,在这种情况下sort_by接收包含要在proc中调用的方法名称的proc。

@teammates = Roster.all.sort_by(&:level)

相当于

@teammates = Roster.all.sort_by{ |obj| obj.level }