- blogs:
- cles::blog

RailsでSubmit時にAjaxで値をチェックしてポップアップを出す

先日に引き続きRailsねた。今日のお題は「フォームをSubmitするときに、フォームの値がおかしかったらユーザーに通知。でも、通知はあくまで通知なので、無視することもできる。」というもの。
後半の条件がなかったら普通にバリデーションをかけて、エラーをユーザーに通知すればいいだけなんですが、ここではエラーが無視できるようにするというのがミソ。しかも、チェックのルールはかなり面倒で、かつ、DB参照の必要もあるので、どちらにせよ一度サーバにPOSTしないとバリデーションはできないというのが前提条件。
できてみたら簡単だったものの、どうやるかちょっと悩みました。
† 処理フロー
通知はJavaScriptのconfirm()程度のものでいいみたいなので、こんなフローを考えてみました。
1.先日の要領でフォームをAjaxでポスト
2.ポストされた値をチェック
2.1a.エラーが無ければRJSを使ってフォームを(Ajaxではなく)普通にポストして次画面へ
2.1b.エラーがあればRJSを使ってconfirm()のポップアップを出す
2.1b.1a.「はい」の場合には2.1aと同じようにフォームをポストして次画面へ
2.1b.1b.「いいえ」の場合にはポストをしないで終了
† ちょっと作ってみたもの
ということで、ちょっと作ってみたのがこれ。値がマイナスだとポップアップで確認がでますが、そのまま「はい」と答えれば強行できます。なんか2回もFormをSubmitしちゃっててダサいような気がしなくもないけど、とりあえず動いたので良し。
それにしてもRJSは便利だ。。。。。
app/controllers/test2_controller.rb
app/views/test2/index.rhtml
app/views/test2/update.rhtml
† 参考
a timocracy of one : tag form
page << "window.open('http://www.google.com');" <<--- HAS NO EFFECT -
Ruby on Rails: Talk | Google グループ
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/2312
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(112946)
3 . 年次の人間ドックへ(112372)
4 . 2023 年分の確定申告完了!(1つめ)(111941)
5 . 三菱鉛筆がラミーを買収(111815)