二足のわらじ

〜プログラミングとSEOの勉強をはじめたミーハー26歳のメモ帳〜

【学習75日】テーブル作成に役立つレファレンス型・form_forとは・formの種類(チェックボックス型)・エラー発見メソッド【応用37日】

 

■進捗

chat-spaceを作成する上での

チャットグループの新規作成・編集機能の実装

 

以下は制作を進める上で気になったことのメモ

 

■reference型とは?

マイグレーションでテーブルを作る時の reference型について

reference(参照する)

参考記事:https://qiita.com/ryouzi/items/2682e7e8a86fd2b1ae47

 

マイグレーションでカラムを作成する際に

stringやintegerは型として理解できるけれども

このreference型とはなんぞや??

 

f:id:vamnasocana:20191111094515p:plain

 

 

【概要】

・外部キーをとなるカラムを作成する時に用いる型

・カラム作成時に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種

データベースの情報を元にチェックボックスを生成

 = f.collection_check_boxes :user_idsUser.all:id:name

 

 

■引数の説明

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メソッド

バリデーションエラーが発生した場合、

(入力された内容に妥当性がない!というエラー)

発生した全てのエラーメッセージを配列で取得。

 

        %h2"#{@group.errors.full_messages.count}件のエラーが発生しました。"
        %ul
          - @group.errors.full_messages.each do |message|
            %li= message

 

■バリデーションエラーとは?

参考記事:https://blog.ohgaki.net/there-are-3-types-of-validations#3

f:id:vamnasocana:20191110144851p:plain

 

 

 

 

■resources の7つのアクション

 

7アクション 役割
index リソースの一覧を表示する。
show リソースの内容を表示する。
new リソースを追加する。
create リソースを追加し、作成する。
edit リソースを更新するためのフォームを表示する。
update リソースを更新する。
destroy リソースを削除する。