update_attribute、update_attributes、update_attributes!の違い

たupdate_attribute、update_attributes、update_attributes! はバリデーションやマスアサインメントによっては結構違いが出てしまうのでちょっとまとめた。
class User < ActiveRecord::Base
    validates_length_of :first_name, :maximum => 5
end

@user = User.find(1) => <User id: 1, first_name : "Bob">

update_attribute


  • バリデーションは行わない
  • 一括更新ではないのでattr_protected、attr_accessibleは無効
@user.update_attribute(:first_name,'12345678')
#=> true
#<User id: 1, first_name : "12345678">
#更新に成功する。

update_attributes


  • バリデーションを行う
  • バリデーションでエラーが出ても、更新される(?)
@user.update_attributes(:first_name => '12345678')
#=> false
# <User id: 1, first_name : "12345678">
# @user.update_attributesはfalseを返すが、更新には成功する。なんか変な気が・・・

update_attributes!


  • バリデーションを行う
  • 保存に失敗すると ActiveRecord::RecordInvalid を発生させる
@user.update_attributes!(:first_name => '12345678')
#=> false
#<User id: 1, first_name : "Bob">
# ActiveRecord::RecordInvalid エラーになる
タグ:Rails
posted by digital-squad at 2012年04月18日 15時44分 | Comment(0) | TrackBack(0) | Ruby on Rails / Ruby
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/265332502
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック