Rails4でフォームを使ってデータを送信し、paramsで受信する方法を確認しました。
単純な文字列、配列、ハッシュを指定する方法とその送信データをparamsで受け取る方法をまとめました。
1)サンプルコード作成
①リソースルート設定
$ vi config/routes.rb
resources :users do collection do get 'search' post 'result' end end
②searchビュー
●form_tagヘルパー
・CSRF対策としてhiddenフィールドで予測困難なトークンを追加してくれる。
例)
<input name=”authenticity_token” type=”hidden” value=”Nn2p・・” />
このトークンを設定しないと”ActionController::InvalidAuthenticityToken”のエラーとなる。
※CSRF
クロスサイトリクエストフォージェリ(CSRF)は、ユーザーが知らないうちに他のサイトにデータの書込み、変更、削除のリクエストを送らせるタイプの攻撃手法です。
$ vi app/views/users/search.html.erb
<%= form_tag 'result' do %> string<input type="text" name="string" value="string" /> ary1<input type="text" name="ary[]" value="ary1" /> ary2<input type="text" name="ary[]" value="ary2" /> ary3<input type="text" name="ary[]" value="ary3" /> hash1<input type="text" name="hash[key1]" value="key1" /> hash221<input type="text" name="hash[key2][key21]" value="key221" /> hash222<input type="text" name="hash[key2][key22]" value="key222" /> <button type="submit" class="btn btn-default">Submit</button> <% end %>
③resultビュー
$ vi app/views/users/result.html.erb
<H2>Search Result</H2> <%= p @string %> <%= p @ary %> <%= p @hash %>
④コントローラ
def search end def result @string=params[:string] @ary=params[:ary] @hash=params[:hash] end
2)実行結果
下記URLにアクセスし、実行した結果を下記に示します。
http://localhost:3000/users/search
string
[“ary1”, “ary2”, “ary3”]
{“key1″=>”key1”, “key2″=>{“key21″=>”key221”, “key22″=>”key222”}}