すでにメンバーの場合は

無料会員登録

GitHubアカウントで登録 Pikawakaが許可なくTwitterやFacebookに投稿することはありません。

登録がまだの方はこちらから

Pikawakaにログイン

GitHubアカウントでログイン Pikawakaが許可なくTwitterやFacebookに投稿することはありません。

Rails

【Rails】 form_tagの使い方を習得しよう

ぴっかちゃん
ぴっかちゃん

form_tagとは、railsで情報を送信するためのヘルパーメソッドです。form_tagを使うことにより、簡単に入力フォームに必要なHTMLを作成することができます。

ビューファイル | form/tagの基本構文
1
2
<%= form_tag('パス', 'オプション') do %>
<% end %>

form_tagの基礎情報

この章では、form_tagの基本的な使い方について解説します。

form_tagの使い方

form_tagを使用する時には下記のように記述します。

ビューファイル
1
2
<%= form_tag('パス', 'オプション') do %>
<% end %>

オプションにはhttpメソッドなどを指定できます。
デフォルトだとhttpメソッドはgetになります。
実際の例は下記のようになります。

ビューファイル
1
2
3
4
<%= form_tag('/main', method: :post) do %> 
  <input type="text" name="nickname"> 
  <input type="submit"> 
<% end %>

実際に表示されるコードはこのように変換されます。

html | コンパイル後のコード
1
2
3
4
5
6
 <form action="/main" accept-charset="UTF-8" method="post">
     <input name="utf8" type="hidden" value="✓" />
     <input type="hidden" name="authenticity_token" value="※ここにはトークンが入ります" />
     <input type="text" name="nickname">
     <input type="submit">
 </form>

このように文字コードと不正な情報が投稿されるのを防ぐためトークンが自動で作成されているのが確認できます。

ですのでrailsでフォームを作成する際はこのようなform系のヘルパーメソッドを使用して作成します。

form_tagの引数にはパスとhttpメソッドなどのオプションを指定します。
ここに書くべき記述はどのように調べたら良いでしょうか?

newアクションは投稿フォームを表示するアクションです。
投稿された内容はデータベースに保存したいですよね。
ということは次に動かすべきアクションは何になるでしょうか?

そうですね、createアクションで投稿した内容をデータベースに保存したいですね。
ということはパスとhttpメソッドはmainコントローラーのcreateアクションを動かすよう指定してあげれば良さそうです。

rails routesコマンドで調べてみましょう。

ターミナル
1
POST   /main(.:format)              main#create

上のように書いてあるのが確認できると思います。
そうするとパスは/main、httpメソッドはPOSTであることがわかります。
なので上のように<%= form_tag('/main', method: :post) do %>と書くということになります。

アクション名で記述してみよう

form_tagですがパスとhttpメソッドで次に動かすアクションを指定できましたが、直接コントローラー名とアクション名を指定することもできます。

ビューファイル
1
2
3
4
<%= form_tag({controller: :main, action: :create}, { method: :post}) do %>
  <input type="text" id="name">
  <input type="submit">
<% end %>

form_tagでのスタイルの当て方

form_tagでcssのclassを設定する場合は下記のように記述します。

ビューファイル
1
2
3
4
<%= form_tag('/main', method: :post, class: "hoge") do %>
  <input type="text" id="name">
  <input type="submit">
<% end %>

form_forとform_tagの違い

railsにはform_tagの他にform_forといったヘルパーメソッドも用意されています。

一般的に投稿フォームで投稿した内容が保存されるデータベースが存在する時にはform_forを使い、検索フォームなど投稿フォームに入力した内容が保存されない場合はform_tagを使用します。

詳しくは、form_forの使い方を参考にしてください。

また、rails5.1から追加されたフォームを作成するためのヘルパーメソッドのform_withも合わせてチェックしましょう。こちらの書籍でも、Ruby on Railsの基礎から実際に開発現場に必要な知識まで幅広く学ぶことができます。

この記事のまとめ

  • form_tagは、簡単に入力フォームを作成することが出来るヘルパーメソッドのこと
  • 主に検索時などデータを特定のアクションに送りたい時に使う
  • form_tagを使うと、文字コードと不正な情報が投稿されるのを防ぐためトークンが自動で作成される