#実現したいこと
rails6のAPIモードにて、同じ駅に登録したユーザー(free_users)から予定の入っていないユーザーが6人以上いる駅(active_stations)を絞り出し、同じ駅を持つ予定なしユーザー同士でチャットルームを形成しようとしています。
#エラー
先にエラー文を載せておきます。
エラー①
ruby
1NoMethodError (undefined method `free' for User (call 'User.connection' to establish a connection):Class
エラー②
ruby
1ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: missing FROM-clause entry for table "free_users"
#該当コード
user_rooms_controller(チャットルームとユーザーを紐づける中間テーブル)
ruby
1def create 2#ここがエラー発生箇所ですーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 3エラー①の場合 @active_stations = Station.joins(:users).where("users.where({free: true}.count >= 6)") 4 5エラー②の場合 @active_stations = Station.joins(:users).where("users.where({free: true}.count >= 6)") 6------------------------------------------ 7 @active_stations.each do |station| #それぞれのセッティング可能駅について処理 8 9 room = Room.create(station_id: station.id) #1、セッティング可能駅についての部屋を作成 10 users = station.users.where(free: true) #同じセッティング可能駅を登録している予定なしユーザーを取得 11 selected_users = users.sample(6) #同じ駅を登録している予定なしユーザーからランダムで6人抽出 12 13 selected_users.each do |user| #予定なしユーザーを同じ部屋idを持つように処理 14 room.save 15 user_room = UserRoom.build!(user_id: user.id, room_id: room.id) 16 user.free = false 17 user.save 18 19 render json: { status: 'SUCCESS', message: 'Loaded user_rooms', data: user_room } 20 end 21 22 end 23 end
station.rb(ここでfree_usersを定義)
ruby
1def free_users 2 free_users = self.users.where(free: true) 3 return free_users 4end
#試したこと
エラー発生箇所を以下のようにいじったりしました。whereメソッドの使い方的に別で定義したfree_usersを使用することができないのはわかりました。
ruby
1@active_stations = Station.where(user: User.where(free: true))
ご教授よろしくお願いします!
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。