- 追加された行はこの色です。
- 削除された行はこの色です。
&tag(Rails3/検証);
*目次 [#r8a28180]
#contents
*参考情報 [#nfad1cd9]
-[[Rails3]]
*コントローラーだけで検証できるの? [#maf1a0ed]
-[[railsのバリデーションに今さら喧嘩を売る - screw it!:http://d.hatena.ne.jp/tsuyoshikawa/20090325/1237977001]]
-[[How to validate a search form in ruby on rails? - Stack Overflow:http://stackoverflow.com/questions/13227345/how-to-validate-a-search-form-in-ruby-on-rails]]…noticeを使う。
-できることはできるけどかなり特殊みたい。検索画面でもDBなしのモデルを作ってそれで検証したほうがいいらしい(ほぼその情報しかない)。
-あえてやろうとすれば、とするしかない。
#pre{{
if (エラー発生)
@person.errors.add(:age, 'が不正です')
end
}}
*エラーメッセージのカスタマイズ [#r8b6ae00]
-ページトップに表示するメッセージは#error_explanation、フィールドごとのエラーは.field_with_errorsでカスタマイズできる。
-twitter-bootstrap-railsを使っている場合、例えば、custom.css.scssというファイルを以下の内容で作るとそれっぽく表示される。
#pre{{
@import "bootstrap_and_overrides";
#error_explanation {
@extend .alert;
@extend .alert-error;
@extend .alert-block;
}
.field_with_errors {
@extend .control-group.error;
}
}}
*blankとnilの取り扱い [#b50c1787]
-select_tagなどで:include_blankを指定し、これを選択した場合、パラメータとしてブランク("")が渡ってくる。
-データベースにはblankではなくnilを保存したい場合結構やっかいっぽい。[[ruby on rails - Make blank params[] nil - Stack Overflow:http://stackoverflow.com/questions/1183506/make-blank-params-nil]]のように、before_saveなどのフィルタを使って無理やり変換する方法はあるけど、多数保存するときに問題になるかも。
-さらにbefore_saveはvalidationの後で呼ばれるので、そのままだと、allow_nilを指定していても、nilじゃないのでエラーになってしまう。この場合、before_validationで""をnilに変換しないといけない。
-DBに""を保存してもいいという前提にして、allow_nilじゃなく、allow_blankを指定するのが簡単なのかも…。[[allow_nilの代わりにallow_blankを使えばいいよ | ひげろぐ:http://higelog.brassworks.jp/?p=150]]