重新加载模型属性

Tom*_*man 13 activerecord ruby-on-rails

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

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

post.body = Post.find(post.id).body
Run Code Online (Sandbox Code Playgroud)

语法更好.也许

post.reload_body!
Run Code Online (Sandbox Code Playgroud)

编辑:我只是想重装单一属性(不是所有属性的一次)

zet*_*tic 11

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

def reload_attribute(attr)
  value = self.class.where(:id=>id).select(attr).first[attr]
  self[attr] = value
end
Run Code Online (Sandbox Code Playgroud)

这会发出一个SELECT只检索一列并将其值赋给当前模型实例中的属性的问题.打电话(例如):

post = Post.find(1)
post.reload_attribute(:body)
Run Code Online (Sandbox Code Playgroud)

真的,你应该去post.reload(doc).除非你有非常宽的列,否则会产生一些性能成本SELECT *

  • 我看到的用例是避免清除关系缓存.如果我只刷新对象的一个​​属性,则已加载的关系将不会在之后触发新的SQL调用. (2认同)