0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

フォームヘルパー セレクト編

Posted at

初学者の備忘録

初学者の備忘録です。今回は前に投稿したフォームヘルパー編で出てきたフォームの種類selectについて詳しく紹介していこうと思います。応用編です。

selectとは

フォームを選択している状態だと選択フォームが表示されるフォームレイアウトのことです。

閉じている状態
CE859C94-3E56-49BC-8986-94D07BA64741.jpeg

選択している状態
85F92C8E-094E-4D60-B3CE-563845C93F3F.jpeg

一覧

対象Modelから対象カラムに保存されているデータを一覧表示させます。

view
<%= f.collection_select :area_id, Area.all, :id, :name, { include_blank: "地方を選択してください" }, { class: "form-control"} %>

上記のコードではAreaモデルからnameカラムの一覧データを表示しています。

日本語訳すると:area_idからArea.allで地方情報を全て持ってきて、idが実際のデータでnameが表示される表示名といった感じです。

collection_selectはフォームヘルパーメソッドの一つなのでform_withを使用する場合こちらのやり方をおすすめします。それとこの実装方法だと初期値も自分で設定してあげることができます。

mapを使用した別の実装方法もあります。下記のコードです。

view
<%#= f.select :area_id, Area.all.map{|a| [a.name, a.id]}, { prompt: "地方を選択してください" }, { class: "form-control" } %>

ですがmapのメリットをいかせてませんし、フォームヘルパーメソッドが使用できるのにこちらを実装する理由がないのであまり使用しません。(*初学者の意見です)

失敗したとこ

上記で説明で実装可能ですが、ここでは失敗してためになったことを残しておこうと思います。

collection_selectについてよく理解していなかった頃、selectフォームを実装して下記のコードを記述しました

<%= f.select :area_id, Area.all, { prompt: "地方を選択してください" }, { class: "form-control" } %>

上記のコードではArea.allからとってきたデータをIDで表示させる仕組みらしいです。なのでデータ表示が
175908C9-48F1-412D-93E0-421D4F2BDC6A.jpeg
このようになってしまいました。

IDで表示させるのではなくコレクションとして表示しなくてはならないのでcollection_selectを使用します。

一覧セレクトボックスの実装は以上となります。次はJavaScriptを使用してセレクトボックスの中身が変わる仕組みを実装していきます。

JavaScript

Coming Soon

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?