全班常数

时间:2011-03-17 09:28:51

标签: ruby-on-rails scope const

我需要实现<和>模型的运算符。

代码是这样的:

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:未定义的局部变量或方法`sizes_map'

事实证明,在它的方法中看不到类范围的常量。

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

这里有什么问题?

1 个答案:

答案 0 :(得分: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. Ruby编码约定建议使用2空格缩进,而不是4空格
  2. 不要在方法名称和参数之间放置空格
  3. 不要使用显式接收器(self.)来调用实例方法
  4. 不要使用显式返回