すでにメンバーの場合は

無料会員登録

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も合わせてチェックしましょう。

この記事のまとめ

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

9

わかった!