重新加载模型属性

时间:2011-01-21 20:33:57

标签: ruby-on-rails activerecord

刷新给定模型属性的最佳方法是什么?

即,功能上,我想要这个:

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

语法更好。也许

post.reload_body!

修改:我只想重新加载单个属性(不是一次性所有属性)

1 个答案:

答案 0 :(得分:11)

打败我为什么要做这样的事情,但是:

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.reloaddoc)。除非你有非常宽的列,在执行SELECT *

时会产生一些性能成本