0
0

フォームヘルパー実装(form_with)

Posted at

初学者の備忘録

初学者の備忘録です。今回はForm_withヘルパー編

フォームヘルパーとは

入力のためのフォームを作成するためにHTMLにはフォームタグというタグが存在する。
Railsのヘルパーメソッド「フォームヘルパー」を用いて、フォームタグを生成できる。
フォームヘルパーには3種類存在します。簡単に説明すると
・form_tag・・・入力フォームのレイアウトだけ作る
・form_for・・・form_withと内容はほとんど同じ。ただ、HTTPメソッドを定義してあげる必要があるのでアレンジができる
・form_with・・・form_forを楽に記述できるようにしたもの。HTTPメソッドを省略することができるが、ルーティングでonlyで囲めるような基本的なHTTPメソッドしか使えない。
になります。詳しくは参考資料をご確認ください。

今回はform_withを使用した入力フォームの実装方法になります

実装

それではfrm_withを使用した入力フォームを作成していきます。

【1】 基本
基本的なコードはこちらになります。

view
<%= form_with model: 変数, url: 送信先, local: true do |f| %>
<% end %>

JavaScriptを使用しなくて、非同期にもしなくていい場合はlocal: trueは記述しなくていいです。

【2】 フォーム
form_withで囲むようにフォームの部品を囲んでいきます。基本的な書き方はこちらです。

view
<%= form_with model: 変数, url: 送信先, local: true do |f| %>
  <div class="form-group">
    # 表示名
    <%= f.label :カラム名, '表示名' %>
    # 入力フォーム
    <%= f.フォーム部品 :カラム名 %>
  </div>
<% end %>
を使用することによって入力フォームと表示名をグループ化させています。 入力フォームのフォーム部品を変えることで様々な入力フォームに変更可能です。

8E886D64-B5CB-4368-A1B9-8DF67C9B2C31.jpeg

必要に応じて変えましょう。

【3】 ヒント
入力フォームに時々ヒント情報が含まれている時がありますよね。それを実装してみたいと思います。

view
<%= form_with model: 変数, url: 送信先, local: true do |f| %>
  <div class="form-group">
    # 表示名
    <%= f.label :カラム名, '表示名' %>
    # 入力フォーム
    <%= f.フォーム部品 :カラム名, placeholder: "ヒント" %>
  </div>
<% end %>

placeholder:を追加するだけでできますのでおすすめです。

おまけ

ちなみに私は下記のようなコードを基本に多少bootstrapでアレンジするくらいです。

<div class="form-group">
    <%= f.label :おまけ %>
    <%= f.text_field :sect, placeholder: "ヒント", class: "form-control" %>
</div>

<div>
    <%= f.submit "投稿", class: "btn btn-info btn-block mb-5" %>
</div>

上記のようなコードだと下記のような見た目になります。

1E161646-7782-48E1-A456-57FDC7FF2092.jpeg

【4】 コントローラー
次はコントローラーの記述をしていきます。私が実際に実装したコードを例として進めていきます。

controllers



def new
    # 空の変数作成
    @place = Place.new
  end

  def create
    # 許可されたデータが変数に格納
    @place = Place.new(place_params)
    # 保存が成功した場合
    if @place.save
      # フラッシュメッセージを表示して詳細ページへ遷移
      redirect_to admin_place_path(@place), notice: "投稿されました"
    # それ以外の場合(失敗した場合)
    else
      # 新規投稿ページへ遷移
      render :new
    end
  end


この時にバリデーションを設定しておくと便利です。データが送られているのかどうかの判断がしやすくなるからです。

最後に

以上がform_withを使用した入力フォーム作成になります。
入力フォームの種類によっては苦戦したところもあるので、別枠で投稿していきたいです。それとフォームは新規投稿と編集で使うことが多いのですが、まとめて一つの部分テンプレートにもできるみたいなのでそれもまた整理ができたら投稿します。
それではお疲れ様でした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0