Qual é o valor de si mesmo em um modelo Rails e por que os métodos de instância óbvios não estão disponíveis?

Eu tenho um método de acessador personalizado no meu aplicativo rails 3.1.6 que atribui um valor a um atributo, mesmo se o valor não estiver presente.O atributo my_attr é um Hash serializado que deve ser mesclado com o valor fornecido, a menos que um valor em branco seja especificado , caso em que irá definir o valor atual para um valor em branco. (Existem verificações adicionadas para garantir que os valores sejam o que deveriam ser, mas são removidos por brevidade, pois não fazem parte da minha pergunta.) Meu setter é definido 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

Esse código funciona bem como está, mas não quando eu uso self.write_attribute (). Eu então recebo o seguinte erro:

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

Minhas perguntas são assim: Parece mais lógico ter write_attribute disponível para uma instância, então por que ela está disponível apenas para a classe enão para a instância? Há algo faltando no meu conhecimento fundamental deauto em Ruby ou Rails (ou ambos)?

questionAnswers(1)

yourAnswerToTheQuestion