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が、似たようなものです。Web と 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

#update_attributesRails 3 の 1 つの注意点は、必要な場合とそうでない場合があるため、と比較して大量代入保護を回避することです。もちろん、Rails 4 では、属性が異なる方法で保護されているため (強力なパラメーターを使用)、問題にはなりません。

于 2013-10-25T20:42:27.620 に答える