プログラミング

Rails form_tagとform_forの使い方

Rails form_tagとform_forの使い方と、それぞれの違いについて解説します。

form_tag の使い方

// routes.rb
post 'dev/index'
get 'dev/form'

// form.html.erb
<%= form_tag('/dev/index', method: :post) do %>
<%= text_field_tag :name %>
<%= text_area_tag :content %>
<%= submit_tag("submit") %>
<% end %>

// index.html.erb
<%= params[:name] %>
  • routes.rb について

ポスト先を設定するのが肝です。
今回は dev/index に対してデータをポストしたいので、それをpostと書き換えます。

  • form.html.erb について

form_tagメソッドの第一引数には、ポスト先を記述します。
第二引数以降はオプションで、ここでは書いていませんが、フォームにCLASSやIDを割り当てたりできます。
method:はデフォルトなので、別に書かなくても平気です。

  • index.html.erb について

form_tagは、params[:name]で取得できますが、
form_forは、params[:userinfo][:name]のようになります。

form_for の使い方

// routes.rb
post 'dev/index'
get 'dev/form'

// dev_controller.rb
def form
  @userinfo = Userinfo.new
end

// form.html.erb
<%= form_for(@userinfo , url: dev_index_path) do |f| %>
  <%= f.text_field :name %>
  <%= f.submit %>
<% end %>

// index.html.erb
<%= params[:userinfo][:name] %>
  • dev_controller.rb について

ここで僕はちょっとハマったのですが。どのサイトでも紹介してなかったりで。気をつけないといけないポイントです。
これを書いてインスタンス変数にモデルを定義した上で、次の、form.html.erbのform_forメソッドで使用するわけなので。
これ書いてないとハマります。

  • form.html.erb について

form_forメソッドの第一引数には、定義したモデルのインスタンス変数を書きます。
オプションであるurlですが、これはどういうことかというと、form_forは、デフォルトではsubmitを押してポストされる先が、#createと決まっています。なので、g scaffoldとかしていないで、createがないよーって場合、エラーになります。
そういう時は、自分で任意のURLに飛ばすことができます。

これ例では、dev_index_pathとしていますが、これは、”名前付きルート”というみたいです。意味は、/dev/indexと同様の意味です。

  • index.html.erb について

前述の通り、form_tagとparamsへの格納の仕方が違うので、取り出し方に注意が必要です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です