пользовательский attr_reader в рельсах - PullRequest
3 голосов
/ 27 января 2010

В основном в рельсах, если вы пишете my_obj.attr, он ищет attr в базе данных и сообщает об этом. Как создать пользовательский метод def attr, который внутренне запрашивает у базы данных attr, изменяет его и возвращает? Другими словами, что здесь недостает:

# Within a model. Basic attr_reader method, will later modify the body.
def attr
  get_from_database :attr   # <-- how do I get the value of attr from the db?
end

Ответы [ 2 ]

3 голосов
/ 27 января 2010

Примерно так:

def attr
  value = read_attribute :attr
  value = modify(value)
  write_attribute :attr, value
  save
  value
end
1 голос
/ 27 января 2010

Метод Нейтрино хорош, если вы хотите сохранять измененное значение обратно в базу данных каждый раз, когда получаете атрибут. Это не рекомендуется, поскольку он будет выполнять дополнительный запрос к базе данных каждый раз, когда вы пытаетесь прочитать атрибут, даже если он не изменился.

Если вы просто хотите изменить атрибут (например, использовать его заглавные буквы), вы можете просто сделать следующее:

 def attr
   return read_attribute(:attr).capitalize #(or whatever method you wish to apply to the value)
 end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...