&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を指定するのが簡単なのかも…。 -DBに""を保存してもいいという前提にして、allow_nilじゃなく、allow_blankを指定するのが簡単なのかも…。[[allow_nilの代わりにallow_blankを使えばいいよ | ひげろぐ:http://higelog.brassworks.jp/?p=150]]