Как получить доступ к переменной класса?

class TestController < ApplicationController

  def test
    @goodbay = TestClass.varible
  end
end

class TestClass
  @@varible = "var"
end

и я получаю ошибку

undefined method 'varible' for TestClass:Class 

на линии @goodbay = TestClass.varible

Что не так?

Ответ 1

В Ruby чтение и запись переменных @instance@@class переменных) объекта должно выполняться с помощью метода на этом объекте. Например:

class TestClass
  @@variable = "var"
  def self.variable
    # Return the value of this variable
    @@variable
  end
end

p TestClass.variable #=> "var"

Ruby имеет встроенные методы для создания простых методов доступа. Если вы будете использовать переменную экземпляра класса (вместо переменной класса):

class TestClass
  @variable = "var"
  class << self
    attr_accessor :variable
  end
end

Ruby on Rails предлагает метод удобства специально для переменных класса:

class TestClass
  mattr_accessor :variable
end

Ответ 2

Вы должны правильно обращаться к переменной экземпляра класса. Один из способов заключается в следующем:

class TestClass
  @@varible = "var"

  class << self
    def variable
      @@varible
    end
  end

 # above is the same as
 # def self.variable
 #   @@variable
 # end
end

TestClass.variable
#=> "var"