2011-03-17 54 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