Подтвердить что ты не робот

Перезагрузить атрибут модели

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

I.e., функционально, я хочу это:

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

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

post.reload_body!

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

4b9b3361

Ответ 1

Избивает меня, почему вы хотите сделать такое, но:

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

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

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

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

Ответ 2

Rails 4 имеет более простой ответ для этого

post.body(reload: true)

В рельсах 5.1 это

post.reload_body