2011-03-17 31 views
0

我需要为模型实现<和>运算符。全范围常量

的代码是这样的:

class Product < ActiveRecord::Base 
    sizes_map = ["s", "m", "l", "xl", "xxl"] 

    def < (rhs) 
     return sizes_map.index(self.size_label) < sizes_map.index(rhs.size_label) 
    end 
end 

当我这样做:

pl = Product.new :size_label => "s" 
pr = Product.new :size_label => "l" 
pl < pr 

我获得以下错误:

NameError: undefined local variable or method `sizes_map'

事实证明,那类范围的常数在它的方法中不可见。

此外,产品:sizes_map引发相同的错误。

这里有什么问题?

回答

4

sizes_map应该是一个常数,如果你想以这种方式在类中默认它。常量被定义为大写。

class Product < ActiveRecord::Base 
    SIZES = ["s", "m", "l", "xl", "xxl"] 

    def <(rhs) 
    SIZES.index(size_label) < SIZES.index(rhs.size_label) 
    end 
end 

一些额外的建议:

  1. 红宝石编码约定建议使用2空格缩进,而不是4位
  2. 不要把方法名称和参数之间的空间
  3. 待办事项不使用显式接收器(self.)调用实例方法
  4. 不要使用显式返回
+0

啊,我忘了大写字母。谢谢! – AntonAL 2011-03-17 09:37:00

+0

感谢您的补充。顺便说一句,这些编码习惯在哪里列出? – AntonAL 2011-03-17 09:39:20

+0

AntonAL,https://github.com/bbatsov/ruby-style-guide – 2013-03-08 02:57:02