Общеклассовая константа - PullRequest
0 голосов
/ 17 марта 2011

Мне нужно реализовать операторы <и> для модели.

Код выглядит так:

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

Iполучить следующую ошибку:

NameError: неопределенная локальная переменная или метод `sizes_map '

Оказывается, что константа всего класса не видна в его методе.*

Кроме того, Product: sizes_map вызывает ту же ошибку.

Что здесь не так?

1 Ответ

4 голосов
/ 17 марта 2011

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 предлагают использовать отступ с двумя пробелами, а не с 4 пробелами
  2. Не ставьте пробел между именем метода и аргументами
  3. Не используйте явный получатель (self.) для вызова метода экземпляра
  4. Не используйте явный возврат
...