【学習75日】テーブル作成に役立つレファレンス型・form_forとは・formの種類(チェックボックス型)・エラー発見メソッド【応用37日】
- ■進捗
- ■reference型とは?
- ■form_for
- ■選択肢にチェックを入れる フォームを入れる
- ■エラーが見つけるメソッド errors.full_messages
- ■resources の7つのアクション
■進捗
chat-spaceを作成する上での
チャットグループの新規作成・編集機能の実装
以下は制作を進める上で気になったことのメモ
■reference型とは?
マイグレーションでテーブルを作る時の reference型について
reference(参照する)
参考記事:https://qiita.com/ryouzi/items/2682e7e8a86fd2b1ae47
マイグレーションでカラムを作成する際に
stringやintegerは型として理解できるけれども
このreference型とはなんぞや??
【概要】
・外部キーをとなるカラムを作成する時に用いる型
・カラム作成時にnull:false などの制約を設定することもある。
外部キーを作成する際にはforeign_key: trueが必要になるが
reference型を使わなければ外部キーにならない。
(t.integer :user_id ,null:false ,foreign_key: true では外部キーにならない)
【特徴】
・userではなくuser_idというカラム名を作成してくれる
(外部キーは●●_idというカラム名にする必要があるが
reference型で設定すれば、●●だけで、勝手に_idをつけてくれる)
・インデックスを自動で張ってくれる
(検索を高速化するためのインデックスも通常であれば
index:trueで設定する必要があるが
reference型で設定すれば、勝手にインデックスをつけてくれる)
■form_for
参考記事:https://www.pikawaka.com/rails/form_for
■form_forとは
・情報を送信するためのヘルパーメソッド
・入力フォームに必要なHTMLを簡単に作成可能
・テーブルにレコードを新規作成・更新する際に利用
■form_forを何故使う?
・アプリの投稿フォーム作成
→直接inputタグでは書かない(セキュリティ的な観点から)
→ヘルパーメソッドを使う
(form_tag、form_for、form_with等)
■ヘルパーメソッドをどう使い分ける?
・form_for
投稿フォームに入力されたものをテーブルに保存する場合
・form_tag
テーブルに保存する必要がないもの(検索フォームのようなもの)を作成する場合
・form_with
form_forと同じ。rails5.1からはform_withを推奨
■form_forの使い方
・erbの場合
<%= form_for('モデルクラスのインスタンス') do |f| %> フォーム内容 <% end %>
「モデルクラスのインスタンス」
→保存したいテーブルのクラスのインスタンス。
これからフォームに入力される内容が
このテーブルの具体例(インスタンス)ですという意味
(例)
<%= form_for(@user) do |f| %> <%= f.text_field :name %> <%= f.submit %> <% end %>
・Hamlの場合
= form_for('モデルクラスのインスタンス') do |f| フォーム内容
(例)
= form_for(@user) do |f| = f.text_field :name = f.submit
■引数の定義は忘れない
※引数(@user)を利用する場合は、
コントローラーでインスタンス変数を宣言しておく
def new @user = User.new end
■form_forで投稿フォームを作成する際に必要となるHTMLタグ
メソッド | 用途 |
---|---|
f.text_field | 一行のテキスト投稿フォーム |
f.text_area | 複数行のテキスト投稿フォーム |
f.number_field | 数値入力ボックスを生成 |
f.email_field | メールアドレス入力ボックスを生成 |
f.check_box | データベースの情報を使わないでチェックボックスを生成 |
f.collection_check_boxes | データベースの情報を元にチェックボックスを生成 |
f.select | 選択肢を作成 |
f.collection_select | データベースの情報を元に選択肢を生成 |
f.file_field | ファイル選択ボックスを生成 |
f.datetime_field | 日時の入力欄を生成 |
f.date_select | 日付選択ボックスを生成 |
f.hidden_field | 非表示のフォーム |
f.submit | 送信ボタンの生成 |
■選択肢にチェックを入れる フォームを入れる
f.collection_check_boxes:
投稿フォームを作成するための、HTMLタグの1種
データベースの情報を元にチェックボックスを生成
■引数の説明
https://apidock.com/rails/v4.0.2/ActionView/Helpers/FormOptionsHelper/collection_check_boxes
collection_check_boxes(①object、②method、③collection、④value_method、⑤text_method、⑥options = {}、⑦html_options = {}、⑧&block)public
正直、上記サイトを見てもわからん!
・③は、選択肢として並べるもの
・④⑤が、「結局どのカラムに値を入れるの?」
・⑥以降はオプションなので省略可能
■エラーが見つけるメソッド errors.full_messages
errors.full_messagesメソッド
バリデーションエラーが発生した場合、
(入力された内容に妥当性がない!というエラー)
発生した全てのエラーメッセージを配列で取得。
■バリデーションエラーとは?
参考記事:https://blog.ohgaki.net/there-are-3-types-of-validations#3
■resources の7つのアクション
7アクション | 役割 |
---|---|
index | リソースの一覧を表示する。 |
show | リソースの内容を表示する。 |
new | リソースを追加する。 |
create | リソースを追加し、作成する。 |
edit | リソースを更新するためのフォームを表示する。 |
update | リソースを更新する。 |
destroy | リソースを削除する。 |