Перезагрузить атрибут модели - PullRequest
13 голосов
/ 21 января 2011

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

Т.е. функционально мне нужно:

post.body = Post.find(post.id).body

с более приятным синтаксисом.Может быть

post.reload_body!

Редактировать: Я хочу перезагрузить только один атрибут (не все атрибуты одновременно)

1 Ответ

11 голосов
/ 22 января 2011

Бьет меня, почему ты хочешь делать такие вещи, но:

def reload_attribute(attr)
  value = self.class.where(:id=>id).select(attr).first[attr]
  self[attr] = value
end

Это выдает SELECT, который извлекает только один столбец и присваивает его значение атрибуту в текущем экземпляре модели. Звоните с (например):

post = Post.find(1)
post.reload_attribute(:body)

На самом деле, вы должны просто пойти с post.reload ( doc ). Если у вас нет очень широких столбцов, которые приводят к некоторому снижению производительности при выполнении SELECT *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...