我正在實施聊天室數據結構。如何找到兩個用戶的房間
room.rb
class Room < ActiveRecord::Base
has_many :room_user_ships
has_many :users, through: :room_user_ships
end
room_user_ship.rb
class RoomUserShip < ActiveRecord::Base
belongs_to :room
belongs_to :user
end
user.rb
class User < ActiveRecord::Base
has_many :room_user_ships
has_many :rooms, through: :room_user_ships
end
schema.rb
create_table "rooms", force: true do |t|
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "room_user_ships", force: true do |t|
t.integer "room_id"
t.integer "user_id"
end
create_table "users", force: true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
end
我能得到用戶的房間和房間的用戶
room = Room.find(100)
room.users
我的問題是,當用戶亞歷克斯(用戶ID:10001)將消息發送給用戶艾瑪(用戶ID:10002),我一定要找到房間這些用戶的ID,但我不知道該怎麼做。
迭代所有房間的作品,但不是一個好主意。
user = User.find(10001)
receiver = User.find(10002)
user.rooms.each do |room|
if room.users.include?(receiver)
the_room = room # find it!
break
end
end
另一種方法是使用collect'user.rooms.collect {| room |房間,如果room.users.include?(接收器)}' –