機能 ショートカットキー
リファレンス(参考URL)一覧へ移動 R
記事URLをMarkDownとしてコピー Ctrl+M
前のコードタグへ移動 Ctrl+←
次のコードタグへ移動 Ctrl+→
ヘルプを表示・非表示 H
Tips
- ショートカットキーは記事上で有効です。ヘッダー/フッター付近では機能しないことがあります。
- コードタグ移動機能がうまく動かないときは、Shift+F5でページを更新してみてください。
- このウィンドウを閉じるには、Hキーをもう一度押してください

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への格納の仕方が違うので、取り出し方に注意が必要です。

この記事で欲しい情報が見つからなかった方へ

この記事の更新情報がある場合があります。
この記事は以下の記事とも関連性があると思われます。

Ubuntu 16.04 Rails 5にpostgresSQLをセットアップ
RailsのpostgreSQLにローカルネットワーク(LAN/外部)から接続したい
Rails 5 現在のビューの絶対パス/相対パスを出力
Rails 5 Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true
Rails Ahoy
Railsで挫折しないためのRailsの学習の進め方
Rails ポート3000以外でサーバーを実行`rails s`したい


管理人の方針で、既存の記事の編集はせず、新しい情報や大きな既存情報の更新があった場合には、新しい記事として公開することになっています。
当記事で欲しい情報が見つからなかった・解決に至らなかった場合、これらのリンクがお役に立てるかも知れません。

どうやってこの関連記事を生成しているの?
この機能のPHPソースコード(2500行)

コメントを残す

Close Menu