現在、旅行の持ち物チェックリストが「旅行先とユーザーの年齢、性別」を入れただけで出力されるようなサービスを作っております。持ち物チェックリストの構成は「旅行先とユーザーの年齢、性別」によって変わります。このような仕様を作るためには、どこに条件分岐を描けばよろしいのでしょうか?DBのレコードに条件を書くことなどは可能なのでしょうか?
ユーザーの特徴を入力したらそれを元にしたデータが出力されるという点では占いアプリなどに近いのかもしれません。
理想
Itemテーブルにもともと持ち物を入れておいて、ユーザーの年齢、性別によって条件に当てはまる持ち物のみが出力されるという仕様にしたいです。
イメージ↓(このような仕様ができるのか?)
Itemテーブル
||name|条件|
|:--|:--:|
||passport|if user.age >= 20|
||化粧品|if user.gender == female|
21歳かつ女性が使った場合、持ち物チェックリストにはパスポートと化粧品が出力されている。
## 前提
持ち物テーブル、ユーザーテーブル、旅行先テーブルを用意しました。
** 持ち物テーブル(Item) **
- nameカラム
パスポート
水着
浮き輪
などの旅行の持ち物をデータとして持たせています。
** ユーザーテーブル(User) **
- 年齢カラム
- 性別カラム
** 旅行先テーブル **
- name
ユーザーテーブルと持ち物テーブルは多対多の関係です。同じく旅行先テーブルも。
*ユーザーが入力するのは旅行先、年齢、性別のみ。持ち物チェックリストを自ら記入はしない。
## 試したこと
*ユーザーテーブルと持ち物テーブルのみ
意図
Userのインスタンスメソッドcheck_itemを作成し、ユーザーの年齢と性別によって持ち物が作成される。
問題点
今後条件が年齢や性別、さらには旅行先などの条件が追加されることを考えるとモデルにこのようにインスタンスメソッドを書いてif文で条件分岐を書くのはあまりようくないのではないか。
rb
1class User < ApplicationRecord 2 has_many :user_items 3 has_many :items, through: :user_items 4 enum gender: {male: 0, female:1} 5 def check_item 6 if self.age >= 20 && self.male? 7 self.items.create(name:"passport") 8 self.items.create(name:"shirt") 9 elsif self.age >= 20 && self.female? 10 self.item.create(name:"化粧品") 11 end 12 end 13end 14
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/02 07:50
2020/03/02 07:59
2020/03/02 08:05
2020/03/02 08:09
2020/03/02 08:17
2020/03/02 09:58
2020/03/02 10:10
2020/03/02 10:42
2020/03/02 10:45
2020/03/02 11:00