libro
www.tuyano.com
初心者のためのRuby on Rails3入門

View(ビュー)を利用する (5/5)

作成:2012-01-23 08:04
更新: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送信が行えるようになります。これを忘れるとフォームの送信が受け取れないので注意しましょう。

完成したら、ページにアクセスしてフォームを送信してみてください。送信されたテキストが画面に表示されるはずです。ここでは、送信されたフォームの内容を以下のように受け取っていますね。
str2 = params['txt1']
先ほど、パラメータの値を受け取ったのと全く同じです。フォームの送信も、paramsの中に整理されているのですね。ただし、今回はindexで普通にアクセスした時とフォーム送信をした時の両方の処理を行う必要がありますので、取得した変数str2nilでなければ(つまり何かの値が送られてきたなら)変数@msgを設定するようにしてあります。

これで、フォームを使ってページからControllerにデータを送り、そこで処理してまた表示をする、といったインタラクティブな操作が行えるようになりました。それぞれで実際にさまざまなフォームを作って試してみるとよいでしょう。

※プログラムリストが表示されない場合

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"    #★これを追加
……以下略……

※関連コンテンツ

「初心者のためのRuby on Rails3入門」に戻る