前提・実現したいこと
現在、railsでマッチングアプリを実装中です。
マッチしたユーザーをセレクトボックスで選択して、チャットルームへ遷移するという仕様です。
そこでチャットルームに存在するユーザーは、今後チャットルーム作成画面でセレクトボックス内に表示されないようにしたいです。
そうでないと同じユーザーのチャットルームが何個もできてしまうからです( ; ; )
こんな方法ってあるのでしょうか。。
該当のソースコード
こちらはマッチしたユーザーを表示しているセレクトボックスです。
@matchがマッチした全てのユーザーのユーザー情報を表しています。
html
1・ 2・ 3・ 4<div class='chat-room-form__field--right'> 5 <select name="room[user_ids][]"> 6 <option value="">チャットするユーザーを選択してください</option> 7 <% @match.each do |match| %> 8 <option value=<%=match.id%>><%= match.nickname %></option> 9 <% end %> 10 </select> 11 <input name="room[user_ids][]" type="hidden" value=<%=current_user.id%>> 12</div> 13・ 14・ 15・
こちらは@matchに格納されているユーザー情報です。
[#<User id: 4, nickname: "さちこ", gender: "女", email: "oo@oo.oo", created_at: "2020-09-26 05:00:23", updated_at: "2020-09-26 05:00:23">, #<User id: 10, nickname: "さやか", gender: "女", email: "ss@ss.ss", created_at: "2020-09-27 05:09:51", updated_at: "2020-09-27 05:09:51">]
こちらはroomコントローラーです。
@matchを定義しています。
class RoomsController < ApplicationController def index @favorite_user_infos = current_user.favorite_user_infos #情報を取ってる @favorite_users = current_user.user_info.favorite_users #ユーザーを取ってる x = current_user.favorite_user_infos.pluck(:user_id) y = current_user.user_info.favorite_users.ids z = x & y @match = User.where(id: z) end
この実装で使っているモデルは、Roomモデル、Userモデル、その二つの中間テーブルのRoomUserモデルです。
これはroomモデルです。
class Room < ApplicationRecord has_many :room_users has_many :users, through: :room_users has_many :messages validates :name, presence: true end
これはUserモデルです。
class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable has_one :user_info has_many :favorites has_many :favorite_user_infos, through: :favorites, source: :user_info has_many :room_users has_many :rooms, through: :room_users has_many :messages validates :nickname, presence: true validates :gender, presence: true end
これはRoomUserモデルです。
よろしくお願いします( ; ; ) class RoomUser < ApplicationRecord belongs_to :room belongs_to :user end
補足情報
selectボックスのオプションのdisabledを使うのかなと思いました。
ただ、「チャットルームに存在しているmatchは表示しない」という設定の仕方がわかりません。。
必要な情報がありましたら、なんでもおっしゃってください。
よろしくお願いいたします( ;∀;)
回答1件
あなたの回答
tips
プレビュー