Какова ценность self в модели Rails и почему нет доступных методов экземпляра?

У меня есть собственный метод доступа в моем приложении rails 3.1.6, которое присваивает значение атрибуту, даже если оно отсутствует. Атрибут my_attr представляет собой сериализованный хэш, который следует объединить с данным значением, если не указано пустое значение. , в этом случае он установит текущее значение в пустое значение. (Есть добавленные проверки, чтобы убедиться, что значения являются такими, какими они должны быть, но для краткости они удалены, так как они не являются частью моего вопроса.) Мой сеттер определен как:

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

Этот код работает хорошо как есть, но не тогда, когда я использую self.write_attribute (). Затем я получаю следующую ошибку:

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

Мои вопросы, таким образом: кажется более логичным иметь write_attribute для экземпляра, так почему он доступен только для класса иnot к примеру? Чего-то не хватает в моих фундаментальных знанияхself в Ruby или Rails (или оба)?

Ответы на вопрос(1)

Ваш ответ на вопрос