我有一个表cameras
,可用的选项是current_user.id
。在相机表中,每个相机都有owner_id
,这实际上是用户添加相机的ID。当前用户的相机可以像这样
user_cameras = Camera.where(owner_id: current_user.id).order(:id).all
但我还有另一张表camera_shares
,其中有一个camera_id
和一个user_id
(与之共享相机),我正在做的是,获取所有这些首先分享user_id
为current_user.id
的位置,然后获取所有camera_id
个&#39},并通过它们获取相机
camera_shares = CameraShare.where(user_id: current_user.id).all
camera_share_ids = []
camera_shares.each do |share|
camera_share_ids[camera_share_ids.count] = share.user_id
end
@shared_cameras = Camera.where(id: camera_share_ids).order(:id).all
我正在寻找的方法是在第一个获取用户摄像头的第一个查询中加入一些,这样在一个查询中我可以获得所有用户拥有的摄像头以及与他共享的摄像头,在Camera_shares中,我引用了user_id
和camera_id。
我可以在一个查询中解决所有这些混乱吗?
更新:Camera.rb详细信息
class Camera < Sequel::Model
include Hashie::Extensions::Mash
many_to_one :vendor_model, class: 'VendorModel', key: :model_id
one_to_many :endpoints, class: 'CameraEndpoint'
many_to_one :owner, class: 'User', key: :owner_id
one_to_many :shares, class: 'CameraShare'
one_to_many :webhooks, class: 'Webhook'
one_to_one :cloud_recording
one_to_one :motion_detection
CameraShares详细信息
class CameraShare < Sequel::Model
# Share kind constants.
PRIVATE = 'private'.freeze
PUBLIC = 'public'.freeze
ALL_KINDS = [PRIVATE, PUBLIC]
# Class relationships.
many_to_one :camera
many_to_one :user
many_to_one :sharer, class: 'User', key: :sharer_id
答案 0 :(得分:0)
尝试以下
user_cameras = Camera.includes(:owner, :users).where(owner_id: current_user.id).order(:id).all
假设您在camera.rb
has_one :owner, class_name: "User", foreign_key: "owner_id"
has_many :cameras_shares
has_many :users, through: cameras_shares
EDITED
user_cameras = Camera.includes(:owner, :shares).where(owner_id: current_user.id).order(:id).all