現在、シェアハウスのマッチングアプリを作成中です。イメージとして次のような動きをします。
- 募集主が同居の募集する
- 他者が募集に応募する
- 募集主が応募に対して、許可をする
といった流れの中で3の許可する部分で【許可】、【許可を取下げ】ボタンの切り替えがしたいのですが、user.rbのhas_manyをどう記述したら良いかわかりません。どなたかご教示いただければと思います。
●ユーザーモデル
ruby
1class User < ApplicationRecord 2 validates :name, presence: true, length: { maximum: 50 } 3 validates :email, presence: true, length: { maximum: 255 }, 4 format: {with: /\A[\w+\-.]+@[a-z\d\-.]+.[a-z]+\z/i }, 5 uniqueness: { case_sensitive: false } 6 has_secure_password 7 8 has_many :houses #募集テーブル 9 has_many :shares #申請・許可テーブル(フラグカラム有り) 10 has_many :requestings, through: :shares, source: :house #申請している募集の取得 11 has_many :reverses_of_share, class_name: 'Share', foreign_key: 'ok_request' #自分の募集にリクエストしてくれているユーザーへの参照 12 13 ↓↓↓ここがわかりません↓↓↓ 14 has_many :ok_requestings, through: :●●●, source: :●●● #申請に対して、許可している募集の取得 15 16 def request(house) #申請する動き 17 self.shares.find_or_create_by(house_id: house.id) 18 end 19 20 def unrequest(house) #申請を取り消す動き 21 request = self.shares.find_by(house_id: house.id) 22 request.destroy if request 23 end 24 25 def requesting?(house) #申請してるかの確認 26 self.reverses_of_share.include?(house) 27 end 28 29 def ok_request?(house) #申請してるかの確認 30 self.ok_requestings.include?(house) 31 end 32 33end
●各テーブル
mysql
1mysql> show tables; 2+-----------------------------------+ 3| Tables_in_share-house_development | 4+-----------------------------------+ 5| ar_internal_metadata | 6| favorites | 7| houses | 8| schema_migrations | 9| shares | 10| users | 11+-----------------------------------+ 126 rows in set (0.00 sec)
●申請・許可テーブルの中身
mysql
1mysql> select * from shares; 2+----+---------+----------+------------+---------------------+---------------------+ 3| id | user_id | house_id | ok_request | created_at | updated_at | 4+----+---------+----------+------------+---------------------+---------------------+ 5| 4 | 2 | 2 | 1 | 2020-04-08 13:44:19 | 2020-04-12 10:57:22 | 6| 7 | 1 | 4 | 1 | 2020-04-09 12:50:42 | 2020-04-22 06:45:23 | 7| 9 | 3 | 4 | 1 | 2020-04-10 12:48:52 | 2020-04-20 02:49:29 | 8| 10 | 3 | 1 | 0 | 2020-04-15 08:56:55 | 2020-04-15 08:56:55 | 9| 11 | 1 | 3 | 1 | 2020-04-16 14:48:19 | 2020-04-17 14:11:23 | 10| 12 | 2 | 5 | 0 | 2020-04-16 14:52:48 | 2020-04-20 02:35:36 | 11+----+---------+----------+------------+---------------------+---------------------+ 126 rows in set (0.00 sec)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/25 05:55