前回までで、プロジェクトの作成と環境の作成が終わった。さていよいよ画面フローを作成していきます。

今回の仕様を確認すると、

フォーム画面(form) → 確認画面(confirm) → 完了画面(end)
        ↑           ↑
    (フォームチェック)  (DB格納&メール送信)

こんな感じで、3つのactionと3つのviewでできあがっている。画面は上記のようにform→confirm→endとします。
今回は勉強のためにscaffoldという便利な仕組みは利用せずにいこうと思う。

まずはcontrollerをいじります。

RUBY:
  1. # 今回のプロジェクトへ移動
  2. cd rails_project/sample
  3.  
  4. vi app/controllers/contact_controller.rb
  5. class ContactController <ApplicationController
  6.     model :contact
  7.  
  8.     def form
  9.         @contact = Contact.new()
  10.     end
  11.     def confirm
  12.         @contact = Contact.new(@params[:contact])
  13.     end
  14.     def end
  15.         @contact = Contact.new(@params[:contact])
  16.     end
  17. end

このようにactionに対応する名前をつけた、メソッドを用意するだけです。
そしてmodelを利用することを宣言しています。これはあとでDBに値を保存したり、値の検証(validate)するのに利用します。

そしてviewを用意する。名前は各actionに対応する名前+.rhtmlとするようです。
vi app/views/contact/form.rhtml

HTML:
  1. <html lang="ja">
  2. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  3. <title>お問い合わせサンプル</title>
  4. </head>
  5. <h1>お問い合わせ</h1>
  6. <%= start_form_tag :action => 'confirm' %>
  7. <%= error_messages_for 'contact' %>
  8. お名前<br />
  9. <%= text_field("contact", "personal") %>
  10. <br /><br />
  11. E-Mail<br />
  12. <%= text_field("contact", "email""size" => 50) %>
  13. <br /><br />
  14. お問合せ内容<br />
  15. <%= text_area("contact", "message""cols" => 50, "rows" => 10) %>
  16. <br />
  17. <%= submit_tag("確認画面へ") %>
  18. <br /><br />
  19. <input name="reset" class="sbutton" value="リセット" type="reset" /> <%= end_form_tag %>
  20. </body>
  21. </html>

Rails特有のタグで作成しています。詳しくはRailsのapiをご参照ください。
また、nameにはDBのテーブルと同じ名前で割り当てています。

確認画面
vi app/views/contact/confirm.rhtml

HTML:
  1. <html lang="ja">
  2. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  3. <title>お問い合わせサンプル</title>
  4. </head>
  5. <h1>お問い合わせ 確認画面</h1>
  6. <red>下記の入力内容でよろしいでしょうか。</red>
  7. <%= start_form_tag :action => 'end' %>
  8. <%= hidden_field("contact", "personal", "value" => @contact.send("personal")) %>
  9. <%= hidden_field("contact", "email", "value" => @contact.send("email")) %>
  10. <%= hidden_field("contact", "message", "value" => @contact.send("message")) %>
  11. お名前:<%=h @contact.send("personal") %>
  12. <br /><br />
  13. E-Mail:<%=h @contact.send("email") %>
  14. <br /><br />
  15. お問合せ内容:<%=h @contact.send("message") %>
  16. <br /><br />
  17. <%= submit_tag("上記の内容で送信する", :disable_with=>'送信処理中...') %>
  18. <input class="sbutton" value="戻る" onclick="history.back()" type="button" /> <%= end_form_tag %>
  19. </body>
  20. </html>

sessionで引継ぎが普通かもしれないですが、今回はhiddenにてフォームの引継ぎをします。特徴はsubmit_tagにてdisable_withパラメータを利用すると、いわゆるフォームの2度押しができないようにjavascriptにてボタンを無効化してくれます。こういうのが、フレームワークの機能としてあるのは便利ですね。
あと戻るボタンは手抜きでhistory.backで・・・

完了画面。これはただのhtmlです。
vi app/views/contact/end.rhtml

HTML:
  1. <html lang="ja">
  2. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  3. <title>お問い合わせサンプル</title>
  4. </head>
  5. <h1>お問い合わせ ありがとうございました。</h1>
  6. </body>
  7. </html>

これで

http://domain:3000/sample/contact/form

http://domain:3000/sample/contact/confirm

http://domain:3000/sample/contact/end

というURLにて画面遷移を確認できます。

これだけでは何もおきませんが、一通りの動きが完了しました。
URLのマッピングとcontroller、viewの関係はすごくわかりやすいですね。

さて次回は値の検証部分に手をつけます。

関連する記事

blogranking←ぽちっとな

<<
>>