こんにちは、おーしまです。
今回は、form_withメソッドについてです。
form_withメソッドとは、Ruby on Rails のヘルパーメソッドです。
(ヘルパーメソッド:主にビューでHTMLタグを出現させたりテキストを加工するために使用するメソッドの総称)
本来、HTMLファイルなら、HTML言語しか記述することはできませんが、
拡張子に「html.erb」とつけることで、Rubyの言語も記述できるようになりました。
そこで活躍するのが、ヘルパーメソッドの form_with です。
今までビューファイルで
<form action="/posts" method="post"> <input type="text" name="content"> <input type="submit" value="投稿する"> </form>
と書いていたものが、
<%= form_with url: "/posts", method: :post, local: true do |form| %> <%= form.text_field :content %> <%= form.submit '投稿する' %> <% end %>
という風になります。
ビューファイルにrubyの記述をする際は、2種類のタグのどちらかで囲みます。
1、<%~~~~~%>:ブラウザ上に表示させないとき
2、<%=~~~~%>:ブラウザ上に表示させるとき
の2つです。
上のコードを見て
「むしろ、form_withメソッドを使った方が記述量が増えているんじゃないか」
と思うでしょう。
よって、ヘルパーメソッドのform_withを使った方が良い点を紹介します。
form_with(ヘルパーメソッド)の利点
パスの指定やRubyの埋め込みなどの記述がシンプルになるため
form_withでは、上のコードでは無いですが、パスをrubyのprefix名で指定できたり、
コントローラーでインスタンスを生成し、使うことができるので、コードがシンプルになります。
セキュリティ上の問題を解決するため
フォームというのは、ユーザーの情報を打ち込んでもらう部分です。
それは時に、重要な個人情報などの機密データでもあります。
普通のhtmlの記述では、悪しきユーザーが個人情報を狙って攻撃してきた際に
個人情報が取られる危険性がありますが、ヘルパーメソッドのform_withは
そういった攻撃に対しての対策が組まれています。(100%安全というわけでは無い)
よってform_withを使った方が良いということですね。
書き方
<%= form_with url: "/posts", method: :post, local: true do |form| %> <% end %>
url: "/posts" は、リクエストを送信するパスを表しています。model: でも良いです。
method: :post は送信するHTTPメソッドを指定しています。ルーティングはPOSTと
設定しているためpostになります。デフォルトでpostなのでこれは省略もできます。
local: trueは送信の方法が変わることを防ぐために記述しています。
do~end の間がフォームになります。
<%= form.text_field :content %> <%= form.submit '投稿する' %>
formはform_withのブロック変数( |form|)です。
text_fieldはフォーム部分のヘルパーメソッドです。
以下にまとめます。
- text_field :1行のテキストボックス
- password_field :パスワード入力ボックス(入力したテキストがアスタリスクなどに置き換えて表示される)
- check_box :チェックボックス(複数選択可能)
- radio_button :ラジオボタン(複数の中から1つしか選択できない)
- submit :送信ボタン
今回はここまでです。
それではまた〜。