通过Rails PG Sequel

时间:2017-01-05 06:02:43

标签: ruby-on-rails ruby postgresql sequel

我有一个表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_idcurrent_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

1 个答案:

答案 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