[前][次][番号順一覧][スレッド一覧]

rails:1529

From: Keiji Yoshimi <walf443@g...>
Date: Wed, 16 Aug 2006 16:14:21 +0900
Subject: [rails:1529] Re: 検証ヘルパーは save メソッドの際のみ有効?

よしみです。
いまいさん、わざわざ再検証していただいてありがとうございます。

> validations.rb では
> (中略)
> となり、結局 save_without_validation が呼ばれちゃいます。
なるほど、validator.rbのなかでさらにsaveメソッドが書き換えられているのですね。
なかなかRailsのソースを読むのは大変そうですw

> なので、
> license2.update_attribute_without_validation_skipping(:key_number, 1)
> #=> false
> 
> とするか(しないですね :)、update_attribute じゃなく update_attributes
> の方を使って
> 
> license2.update_attributes(:key_number => 1)
> #=> false
> 
> とするのがいいと思います。
要するにupdate_attributeだとvalidatorがかからないようなのでなるべく使うなということですね。なんかバッドノウハウっぽいですね。

なんでわざわざvalidationがかからないようにしているんですかねぇ・・・。

とおもって見てみるとvalidate_attribute_with_validationA_skippingの上の
コメントに理由っぽいものがかかれてました。

# Updates a single attribute and saves the record without going through the normal validation procedure.
# This is especially useful for boolean flags on existing records. The regular +update_attribute+ method
# in Base is replaced with this when the validations module is mixed in, which it is by default.

レコードにflagを立てたりするときに使うと良いよ、と書いてあるように取れるのですが、
それとvalidationを抜かすこととの関連性は特に書かれてないですね。

通常、validationが必要であるタイミングというのはプログラミングの中身を知らない
利用者の人のアクションによってデータの更新が発生する場合であり、
その場合はレコードの中身をまるまる書き換えるのが普通で一つのカラムだけを書き換える
というのはまずあり得ないということなのかなと思ったりしました。

自分は仮にそうだとしてもvalidationをかけてほしいと思うわけなんですがどうなんですかねぇ。まぁそれほどupdate_attributeは使わないんでしょうけど。

それとも何かvalidationをかけることによる不都合がありますかね。


--
ML: rails@r...
使い方: http://QuickML.com/

[前][次][番号順一覧][スレッド一覧]

      1522 2006-08-15 12:57 [bsdmad@g...         ] 検証ヘルパーは save メソッドの際のみ有効?
      1523 2006-08-15 14:27 ┣[sakuro@e...         ]                                       
      1526 2006-08-16 06:08 ┃┗[bsdmad@g...         ]                                     
      1527 2006-08-16 07:16 ┗[walf443@g...        ]                                       
      1528 2006-08-16 08:04  ┗[nov@y...            ]                                     
->    1529 2006-08-16 09:14   ┣[walf443@g...        ]                                   
      1533 2006-08-17 10:59   ┗[bsdmad@g...         ]