¿Cuál es el valor de self en un modelo de Rails y por qué no hay métodos de instancia obvios disponibles?

Tengo un método de acceso personalizado en mi aplicación Rails 3.1.6 que asigna un valor a un atributo, incluso si el valor no está presente. El atributo my_attr es un hash serializado que debe combinarse con el valor dado a menos que se especifique un valor en blanco , en cuyo caso establecerá el valor actual en un valor en blanco. (Se agregan controles para asegurarse de que los valores sean los que deberían ser, pero se eliminan por brevedad, ya que no forman parte de mi pregunta). Mi definidor se define como:

def my_attr=(new_val)
  cur_val = read_attribute(:my_attr)  #store current value

  #make sure we are working with a hash, and reset value if a blank value is given
  write_attribute(:my_attr, {}) if (new_val.nil? || new_val.blank? || cur_val.blank?)

  #merge value with new 
  if cur_val.blank?
    write_attribute(:my_attr, new_val)
  else
    write_attribute(:my_attr,cur_val.deep_merge(new_val))
  end
  read_attribute(:my_attr)
end

Este código funciona bien como está, pero no cuando uso self.write_attribute (). Entonces me sale el siguiente error:

NoMethodError:
       private method `write_attribute' called for #<MyModel:0x00000004f10528>

Por lo tanto, mis preguntas son: parece más lógico tener el atributo write_attribute disponible para una instancia, entonces ¿por qué solo está disponible para la clase yno a la instancia? ¿Hay algo que falta en mi conocimiento fundamental deyo ¿En Ruby o Rails (o ambos)?

Respuestas a la pregunta(1)

Su respuesta a la pregunta