[Ruby on Rails入門] form_tagを利用したフォーム送信を分かりやすく解説!

このページではformの基本Railsのform_tagの使い方を詳しく解説していきます。

最後まで読んでいただくことでformの基本とRailsのform_tagの使い方を学ぶことができます。

是非、読んでいただけたらと思います。

1.formの基本

このページでは「WebApp」というWebアプリケーションの作成、コントローラーの作成、ビューの作成を終えているという前提でお話を進めていきます。

もし、分からない方がいましたら、以下の記事を参考にしてください。

[入門者向け] Ruby on Railsのアプリケーション作成方法を分かりやすく解説! [入門者向け] Ruby on Railsのcontrollerを分かりやすく解説! [入門者向け] Ruby on Railsのviewを分かりやすく解説!

form_tagを利用したフォーム送信を解説していく前に、formの基本的な使い方を見ていきましょう。

formはユーザーが入力した値を送信するときに利用します。

Railsでformを利用する場合、どのような使い方をするのか詳しく見ていきましょう。

sampleビューファイルのindex.html.erbにコードを記述していきましょう。

上記はフォームと送信ボタンのみがあるWebページとなっており、「/sample/index」にPOST送信する形になっています。

通常、「sample/index」にアクセスする場合、GETでアクセスするので、GETまたはPOSTかどうか判断する条件分岐をsampleコントローラーに記述する必要があります。

それではsampleコントローラーにGETまたはPOSTかどうか判断する条件分岐を記述していきましょう。

5行目は「if request.post? then」でリクエストがpostであるかを判断する条件分岐となっています。

Railsで「request」はクライアントからサーバーに送られた情報をまとめたオブジェクトとなっています。

「request」にはどのような形でアクセスしたのか等の情報がこのオブジェクトの中に詰まっています。

「post?」というのはPOST送信されたかどうかを表すメソッドとなっています。

「post?」が真であるならば、POST送信がされており、偽であるならば、POST送信がされていないということです。

次にフォームで送信された内容はどのように取得するのか見ていきましょう。

Railsでは「params」で送られてきた値を取得することができます。

ここでは「params[input]」で値を取り出しています。

これで必要なことはすべて記述しましたが、一つ注意点があります。

現状、CSRF対策が有効になっているので無効にする必要があります。

CSRFとは?

CSRFとは「Cross Site Request Forgery」の略で外部のサーバーからフォームに送信する悪質な攻撃のことです。

何もCSRF対策を行っていないformの場合、外部のサーバーからフォーム送信と同じ情報を送ることでフォーム送信を偽装できてしまうのです。

そのため、RailsではCSRF対策として決まったフォームで送信をしないとエラーが起きてしまうという仕組みになっています。

このような事情からCSRF対策を無効にするためにsampleコントローラーの一番上に「protect_form_forgery」と付け加える必要があります。

これでsampleコントローラーの設定は終了です。

最後にルーティング設定を行いましょう。

上記のように「post ‘sample/index’, to: ‘sample#index’」と記述することで「sample/index」にPOSTアクセスが許可されます。

それではサーバーを起動して動きを見ていきましょう。

フォームに「送信」というキーワードを入力してボタンをクリックするとしっかりと「送信」とキーワードが表示されました。




2.form_tagの使い方

「1.formの使い方」で、formの基本を理解できたかと思います。

Railsでせっかくサイバー攻撃の対策がされているにも関わらず、無効にしてPOST送信を行いました。

サイバー攻撃の対策を解除せずにPOST送信するためにはどのようにしたらいいのでしょうか。

結論から言うと、Railsで事前に用意されているフォームヘルパーという機能を使用する必要があります。

フォームヘルパーはビューで利用できる便利な機能となっており、フォーム関係のタグを生成することができます。

フォームヘルパーは<%= %>タグを利用してビューファイルに埋め込んでいきます。

「1.formの使い方」の例をフォームヘルパーを利用して記述すると以下のようになります。

上記のコードがどのようになっているのか詳しく見ていきましょう。

3行目の<%= form_tag(controller: “sample”, action: “index”) do %>はformタグを生成するためのものとなっています。

引数にcontrollerとactionが用意されており、sampleというコントローラーとindexというアクションが指定されています。

4行目の<%= text_field_tag(“input”) %>は<input type=”text”>を生成するためのものとなっています。

引数にinputという値を指定して実行します。

5行目の<%= submit_tag(“送信”) %>は<input type=”submit”>を生成するためのものとなっています。

引数はsubmitボタンに表示する文字を指定しています。

6行目の<% end %>はフォームの終了を表しています。

<% end %>は<%= %>タグではなく、<% %>を利用します。

上記ではフォームヘルパーを利用してフォームを生成しましたが、form_tagを利用したフォーム生成の書式は以下のようになっています。

form_tagの書式

<%= from_tag() do %>

 ~フォームのコントロール~

<% end %>

form_tagの書式を見てみると、do~endの間にコントロールを配置するという書式になっています。

最後にsampleコントローラーの「protect_form_forgery」を削除すると完成です。

それではサーバーを起動して値を送信してみましょう。

「form_tageで送信」というキーワードを入力して送信ボタンを押すと、「form_tageで送信」というキーワードが無事表示されました。




3.Ruby on Railsを学ぶことができるオススメの教材

Ruby on Railsを学習している皆様にオススメの教材をご紹介させていただきます。

現場で使える Ruby on Rails 5速習実践ガイド

以下の本はRuby on Railsの学習を一通り終えてある程度知識を身につけた方にオススメしたい本です。

現場で使える Ruby on Rails 5速習実践ガイド」は現場で実際にどのように使われているのかという視点も交えて解説されています。

そのため、初心者の方が次のステップに進むために最適な本となっていますので、オススメです。

これらの本で是非学習を進めてみてはいかがでしょうか?

レベル別におすすめの本も紹介していますので、どのような本がオススメか知りたい方はこちらもご覧になって下さい。

[2021年最新版] Ruby on Rails を学ぶことができるおすすめの本/参考書

Udemy

UdemyではRuby on Railsを学ぶことができる講座を多数取り扱っています。

以下の記事でRuby on Railsを学ぶことができるオススメの講座をまとめていますので、よかったらご覧になって下さい。

[2021年最新版] Udemy(ユーデミー) おすすめのRuby on Rails講座

プログラミングスクール

TechAcademyWebCampCodeCampTech CampなどでRuby on Railsを学ぶことができます。

それぞれ無料体験も行っているので、どのようなものか試してみるのもいいでしょう。

以下の記事で各プログラミングスクールをまとめているのでこちらもよかったらご覧になってください。

いくら? 悪評は? TechAcademy(テックアカデミー)とは? 口コミもまとめてみました! [受講した方の感想アリ!] DMM WEBCAMP SKILLSとは? 料金・口コミをまとめてみた! [課題が難しい?] 初心者向け! CodeCamp(コードキャンプ)とは? 特徴・料金・口コミをまとめてみました! [感想・体験談アリ!] 実際にTech Camp(テックキャンプ)のプログラミング教養でプログラミングをやってみた! [体験談] Tech Camp(テックキャンプ)のプログラミング教養の学習内容は? 働きながらTECH CAMP(テックキャンプ)で学ぶことはできるのか? 結論:可能です! TECH CAMP(テックキャンプ)ではどのような言語・技術を学ぶことができるの? TECH CAMP(テックキャンプ)の受講料はどのくらい? 安く通う方法もお話します! [体験談・感想あり!]TECH CAMP(テックキャンプ)でどのようなスキルが身につくの?




4.ポイント

ポイント
  • フォームヘルパーを利用することで安全にフォームの値をPOST送信することができます

コメントを残す

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