railsを初めて動かす04【validation入力項目エラーチェックその1】
更に、Edit画面での入力値のエラーチェック(validation)も簡単にできるという噂を聞いたので、早速いろいろ調べてみました。
modelを使ってエラーチェックするらしいです。まあ、もちろん違うやり方、たとえばcontrolを使ってエラーチェックをするやり方もたぶんあるんでしょうけど、とにかく、このmodelのエラーチェック機能を使うと超ハヤイ!ことが分かりました。
例えば、DBのBooksテーブルをモデリングする(とかいう怪しい表現を使ってみた)、Bookモデルに、titleの入力を必須にするエラーチェックを付けてみましょう。
と、最初は空の状態のmodelです。そこに一行だけ加えて
として、http://localhost:3000/book/edit/1 にアクセスして、編集画面を表示して(1というのは、レコードidのこと)、Titleの欄を空にしてEditボタンをクリックします。
そしたらぁ、あSo-!エラーチェックが動いてエラーメッセージが勝手に表示されたんだぞー。あぁーいとぅいまてーん。
↑流行りが過ぎたら削除するつもり。
ちなみに、:titleを:Titleと大文字に書いても同じ動きをしました。
では次に、Titleを5文字以内で、という条件も追加してみました。
そして更に更に、Authorも5文字以内で、という条件も追加してみました。
驚くほど簡単に出来て、もうシビレるワァ。
【広告】
modelを使ってエラーチェックするらしいです。まあ、もちろん違うやり方、たとえばcontrolを使ってエラーチェックをするやり方もたぶんあるんでしょうけど、とにかく、このmodelのエラーチェック機能を使うと超ハヤイ!ことが分かりました。
例えば、DBのBooksテーブルをモデリングする(とかいう怪しい表現を使ってみた)、Bookモデルに、titleの入力を必須にするエラーチェックを付けてみましょう。
# vi myFirst/app/models/book.rb
class Book < ActiveRecord::Base
end
と、最初は空の状態のmodelです。そこに一行だけ加えて
class Book < ActiveRecord::Base
validates_presence_of :title
end
として、http://localhost:3000/book/edit/1 にアクセスして、編集画面を表示して(1というのは、レコードidのこと)、Titleの欄を空にしてEditボタンをクリックします。
そしたらぁ、あSo-!エラーチェックが動いてエラーメッセージが勝手に表示されたんだぞー。あぁーいとぅいまてーん。
↑流行りが過ぎたら削除するつもり。
ちなみに、:titleを:Titleと大文字に書いても同じ動きをしました。
では次に、Titleを5文字以内で、という条件も追加してみました。
class Book < ActiveRecord::Base
validates_presence_of :title
validates_length_of :title, :maximum => 5
end
そして更に更に、Authorも5文字以内で、という条件も追加してみました。
more book.rb
class Book < ActiveRecord::Base
validates_presence_of :title
validates_length_of :title, :author, :maximum => 5
end
驚くほど簡単に出来て、もうシビレるワァ。
【広告】
COMMENT
普通にだと無理でしょうか by 自分
質問ありがとうございます。
:multipart=>true な感じのフォームでfile_fieldからどういうデータがPOSTされているか調べましたが、ファイルのフルパスは送信されていませんでした。ファイル名だけ送信されているようです。
↓な感じです。
filename="testfile1.txt" Content-Type: text/plain
なので、フルパス付きファイル名をエラー画面で表示させるのはなかなか難しいんじゃないかな、と思います。
勝手な推測ですがAJAX的な画面にすればなんとかうまくいくかもしれませんがね。
ちなみに、ブラウザからどんなHTTPパケットが送受信されているかどうかを調べるのにはhttpfoxが便利ですよ。
:multipart=>true な感じのフォームでfile_fieldからどういうデータがPOSTされているか調べましたが、ファイルのフルパスは送信されていませんでした。ファイル名だけ送信されているようです。
↓な感じです。
filename="testfile1.txt" Content-Type: text/plain
なので、フルパス付きファイル名をエラー画面で表示させるのはなかなか難しいんじゃないかな、と思います。
勝手な推測ですがAJAX的な画面にすればなんとかうまくいくかもしれませんがね。
ちなみに、ブラウザからどんなHTTPパケットが送受信されているかどうかを調べるのにはhttpfoxが便利ですよ。
ありがとうございます! by くまこ
すごく丁寧な回答をありがとうございました!
とりあえず消えてしまうままで進めてみようと思います(^^;)
httpfoxというアドオンも知らなかったので今後使ってみますね。
いま作っているアプリはfirefoxで動かない部分があってIEで作っているので・・・
またわからないことがあれば質問するかもしれませんが
そのときはどうぞよろしくお願いします。
とりあえず消えてしまうままで進めてみようと思います(^^;)
httpfoxというアドオンも知らなかったので今後使ってみますね。
いま作っているアプリはfirefoxで動かない部分があってIEで作っているので・・・
またわからないことがあれば質問するかもしれませんが
そのときはどうぞよろしくお願いします。
どういたしまして by 自分
たいしたアドバイスできなくてごめんなさいね。
firefoxのアドオンは強力なものがたくさんですので重宝してます。firebugもそう、ietabもそう。web developerも!!!
また何かあったら遊びに来てください。
firefoxのアドオンは強力なものがたくさんですので重宝してます。firebugもそう、ietabもそう。web developerも!!!
また何かあったら遊びに来てください。
いきなりで大変申し訳ないのですが・・・
validates_presence_of を使って画面の一部のフィールドの入力チェックをしようとしてエラーが発生した場合、
fiel_fieldでファイルのアップロードをするフィールド(入力チェックはしない)だけが
エラー画面で値が消えてしまうのですが
これはもうどうしようもないことなのでしょうか・・・?
file_fieldの値を残したままエラーメッセージを出すことは可能ですか?