7

new 和 create 的块语法如下所示:

 user = User.create do |u|
    u.name = "David"
    u.mail = "dhh@rails.com"
 end

是否有在 Rails 3 和 Rails 4 中有效的块语法来更新属性?就像是:

  user = User.where(name: "David").first

  user.update_attributes do |u|
    u.mail = "dhh@rubyonrails.com"
  end

也许不是update_attributes,但类似的东西。我一直在网上搜索 Github 上的 Rails 4 源代码,我认为没有这样的东西。我错了吗?

PS我不是在寻找制作任何猴子补丁方法或类似的东西,只是对是否有默认附带的方法感兴趣ActiveRecord

4

1 回答 1

7

如果您想要块语法,请使用#tap(自 Ruby 1.9 起可用):

user.tap do |u|
  u.mail = "dhh@rubyonrails.com"
end
user.save

Rails 3 中的一个警告是,与 相比,它避免了批量分配保护#update_attributes,这可能是也可能不是你想要的。当然,在 Rails 4 中这并不重要,因为属性受到不同的保护(使用强参数)。

于 2013-10-25T20:42:27.620 回答