皆様、こんにちわ。
U_OK_2023 です。
本日は、オリジナルアプリの実装について書いていこうと思います。
タスク投稿機能におけるモデル単体テスト
テストをモデルに対し、バリデーションを設定し、
そのバリデーションが実行されるかをテストします。
テストをする前に、実装に必要なバリデーションが設定されているかを確認する。
app/models/task.rb
class Task < ApplicationRecord extend ActiveHash::Associations::ActiveRecordExtensions ~ 中略 ~ #ジャンルの選択が「---」の時は保存できないようにする validates :category_id, numericality: { other_than: 1 ,message: "can't be blank"} end
category_id は アソシエーションを組んだものではなく、
Activehash を実装した際に指定したidです。
other_than: 1 だと、
エラーメッセージが表示されるようにバリデーションを設定しています。
1 は プルダウンが表示される時に、「---」が初期値として
表示されているものですから、
1 (「---」)以外を必ず選択してください。という意味になります。
app/models/category_id
class Category < ActiveHash::Base self.data = [ { id: 1, name: '---' }, { id: 2, name: '見積書' }, { id: 3, name: '会議資料' }, { id: 4, name: '納品書' }, { id: 5, name: '発注書' }, { id: 6, name: '社内資料' }, { id: 7, name: '雑務' }, { id: 8, name: 'その他' }, ] include ActiveHash::Associations has_many :tasks end
other_than: 1 とは { id: 1, name: '---' }, のことです。
異常系では、何も記入しないこと(空白)を指定する時、
「''」を使用しますが、
Activehashでは、初期値が設定されるため何も記入しなくても
1 (もしくは 0)が必ず選択されている状態です。
そのため、空白を意味する「''」は使用することはできません。
したがって、ather_than を使用します。
プログラミングスクールでプルリクエストを依頼した際に、
Activehashを使用した場合、何も選択しないのは「''」ではない。
と指摘していただき、混乱したことを思い出します。
あの経験があるからこそ、今の説明ができます。
間違うことは悪いことではないと改めて思います。
ここだけ注意し、後は、正常系からテストしていきました。
現在の位置と、そこでの記述の意味、受け渡しの関連性は、
とても大切だと改めて感じました。
今回もお読みいただきありがとうございました。