##1. redirect_toについて
あるアクションから別のアクションに処理を転送することを「リダイレクト」と呼ぶ。
例えば、aと言うアクションにアクセスしたら、必要な処理をして自動的にbと言うアクションに移動すると言ったことをさせたいときにリダイレクトを用いる。
redirect_to action: アクション名 ,params:{・・・ハッシュ・・・}
例えば、こんな感じ。パラメータを渡す必要がなければparams以降は不要。
リダイレクト先は割愛しています。
def other
redirect_to aciton: :index, params: {'msg': 'from other page'}
end
aciton: と言うオプションでリダイレクト先のアクションを指定。
パラメータを用意するparams: と言うオプションも添付。これで必要な値をリダイレクト先に渡します。
他のコントローラーに移動したいときはこのように書く。
###リダイレクトの実行
redirect_to controller: 'コントローラー名', action: 'アクション名', params:{ハッシュ}
redirect_toの扱い方に関しては、こちらのQiita記事があまりにも最高だったのでこれを見ると良いと思います。
##2. form_tagについて
CSRF対策が自動でできるフォームヘルパーを用いて、フォームを作ろう。
<form>タグの生成では以下のような形でメソッドを用意する。
form_tag(controller: コントローラー名, action: アクション名)
引数に、controller:とaction:と言う項目が用意されている。
これらで送信先のコントローラーとアクションを指定。
これでそのアクションに送信するための<form>タグが生成される。
具体的な使用例としてはこんな感じ。
<%= form_tag(controller: "helo", action: "index") do %>
<%= text_field_tag("input1") %>
<%= submit_tag("Click") %>
<% end%>
上のコードについて一個ずつ見ていく。
###入力フィールド
<%= text_field_tag("input1") %>
一般化すると、
<%= text_field_tag(割り当てるID名) %>
###送信ボタン
<%= submit_tag("Click") %>
一般化すると。
<%= submit_tag(ボタンのテキスト) %>
###フォームの終了
<% end %>
##3.フォームヘルパーの応用【チェックボックス編】
テキストの入力フィールド以外のコントロール類の使い方も見てみよう。
<h1><%= @title %></h1>
<p><%= @msg %></p>
<%= form_tag(controller: "helo", action: "index") do %>
<%= check_box_tag("check1") %>
<%= label_tag("check1", "check box") %>
<%= submit_tag("Click") %>
<% end%>
引数にはチェックボックスに割り当てるIDを指定。
<%= check_box_tag(割り当てるID) %>
タグを出力するためのもの
<%= label_tag(割り当てるID, 表示するテキスト) %>
コントローラーも修正する必要がある、
仮に、heloコントローラーだとする。
class HeloController < ApplicationController
def index
if request.post? then
@title = 'Result'
if params['check1'] then
@msg = 'Checked!'
else
@msg = 'not checked!'
end
else
@title = 'Index'
@msg = 'check it'
end
end
end
ちなみに、request.post?とはPOSTされたかどうかをチェックするためのものです。これがtrueならPOSTされた場合の処理を用意する。
##4.フォームヘルパーの応用【ラジオボタン編】
ラジオボタンは「radio_button_tag」と言うメソッドを使って作成可能。
###ラジオボタンの作成
radio_button_tag( name値 , value値 )
ラジオボタンに設定するnameの値と、選択したときに得られるvalueの値をそれぞれ引数に用意する。
IDは指定せずとも、nameとvalueから自動的に設定される。フォームヘルパーでは、**「name値_value値」**と言うIDで設定される。
先ほど使ったindex.html.erbファイルを以下のように書き換えると、ラジオボタンのフォームを作ることが可能。
<h1><%= @title %></h1>
<p><%= @msg %></p>
<%= form_tag(controller: "helo", action: "index") do %>
<%= radio_button_tag("r1", "radio 1") %>
<%= label_tag("r1_radio_1", "Radio Button 1") %><br>
<%= radio_button_tag("r1", "radio 2") %>
<%= label_tag("r1_radio_2", "Radio Button 2") %><br>
<%= submit_tag("Click") %>
<% end%>
ここではそれぞれのラジオボタンにラベルをつけている。ここでは、IDは「r1_radio_1」という風に設定されている。
ラベルを用意する場合は自動生成されるIDを指定する必要がある。ちなみに半角スペースはアンダーバーに変換される。
###ラベルの作成
label_tag(割り当てるID, 表示テキスト)
viewファイルだけではなく、コントローラーの修正も必要になる。。
class HeloController < ApplicationController
def index
if request.post? then
@title = 'Result'
if params['r1'] then
@msg = 'you selected: ' + params['r1']
else
@msg = 'not checked!'
end
else
@title = 'Index'
@msg = 'select radio button!'
end
end
end
ラジオボタンは選択したラジオボタンのvalueの値が送られてくる。paramsで値をそのまま取り出せばok。
どれも選択されてない場合もあるので、if params['r1'] then で値が存在するかどうかをチェックし、それから設定された値をチェックして処理を行うのが良い。