View(ビュー)を利用する (5/5)
作成:2012-01-23 08:04
更新:2012-02-16 15:11
更新:2012-02-16 15:11
■フォームの送信について
さまざまな情報をページに受け渡して表示を行う場合、今やったようにパラメータとして受け渡すよりももっと一般的なのは「フォームを送信し処理する」というやり方でしょう。フォームを送信し、受け取ったサーバー側で必要な処理をして、結果を再度表示する。これはWeb開発の基本とも言えるものですね。
では、フォームの送信を行なってみましょう。ここではサンプルとして、入力フィールド1つだけのシンプルなものを考えてみます。下にindex.html.erbのサンプルを掲載しておきますので、このようにViewテンプレートを修正してください。
ここでは、<form>タグでmethod="post" action="./index"という形でフォームを送信しています。indexに送っているということは、つまりindexアクションで、通常にアクセスした場合と、フォームを送信された場合の処理を行うようにする、ということになります。
続いてController側のindexメソッドを修正しましょう。下のリストを参考にindexメソッドの修正を行なってください。
これで完成!では、実はありません。もう1つやっておくべきことがあります。routes.rbを開き、そこに「post "helos/index"」という文を追記してください(下のリスト参照)。これにより、helos/indexへのPOST送信が行えるようになります。これを忘れるとフォームの送信が受け取れないので注意しましょう。
完成したら、ページにアクセスしてフォームを送信してみてください。送信されたテキストが画面に表示されるはずです。ここでは、送信されたフォームの内容を以下のように受け取っていますね。
これで、フォームを使ってページからControllerにデータを送り、そこで処理してまた表示をする、といったインタラクティブな操作が行えるようになりました。それぞれで実際にさまざまなフォームを作って試してみるとよいでしょう。
では、フォームの送信を行なってみましょう。ここではサンプルとして、入力フィールド1つだけのシンプルなものを考えてみます。下にindex.html.erbのサンプルを掲載しておきますので、このようにViewテンプレートを修正してください。
ここでは、<form>タグでmethod="post" action="./index"という形でフォームを送信しています。indexに送っているということは、つまりindexアクションで、通常にアクセスした場合と、フォームを送信された場合の処理を行うようにする、ということになります。
続いてController側のindexメソッドを修正しましょう。下のリストを参考にindexメソッドの修正を行なってください。
これで完成!では、実はありません。もう1つやっておくべきことがあります。routes.rbを開き、そこに「post "helos/index"」という文を追記してください(下のリスト参照)。これにより、helos/indexへのPOST送信が行えるようになります。これを忘れるとフォームの送信が受け取れないので注意しましょう。
完成したら、ページにアクセスしてフォームを送信してみてください。送信されたテキストが画面に表示されるはずです。ここでは、送信されたフォームの内容を以下のように受け取っていますね。
str2 = params['txt1']先ほど、パラメータの値を受け取ったのと全く同じです。フォームの送信も、paramsの中に整理されているのですね。ただし、今回はindexで普通にアクセスした時とフォーム送信をした時の両方の処理を行う必要がありますので、取得した変数str2がnilでなければ(つまり何かの値が送られてきたなら)変数@msgを設定するようにしてあります。
これで、フォームを使ってページからControllerにデータを送り、そこで処理してまた表示をする、といったインタラクティブな操作が行えるようになりました。それぞれで実際にさまざまなフォームを作って試してみるとよいでしょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※index.html.erb <h1>Helo#index</h1> <p><%= @msg %></p> <hr> <form method="post" action="./index"> <input type="text" id="txt1" name="txt1"> <input type="submit"> </form> ※indexメソッド def index str = "テキストを入力。" str2 = params['txt1'] if str2 != nil then str = "あなたは、「" + str2 + "」と書きました。" end @msg = str end ※routes.rbの修正 Tuyano01::Application.routes.draw do get "helos/index" post "helos/index" #★これを追加 ……以下略……
※関連コンテンツ