2017-01-05 2 views
0

J'ai une table cameras et quelles options sont disponibles avec current_user.id. Dans la table des caméras, chaque caméra a un owner_id qui est en fait l'ID de l'utilisateur qui a ajouté la caméra. Caméras pour l'utilisateur en cours peut être obtenir comme ceObtenir des données via l'association dans Rails PG Sequel

user_cameras = Camera.where(owner_id: current_user.id).order(:id).all 

Mais j'ai une autre table camera_shares dans laquelle il y a une camera_id et un user_id (avec qui l'appareil a été partagé), ce que je fais est, Obtenir toutes les actions privilégiées de premier où le user_id est-current_user.id et obtenir tous les camera_id « s et à travers eux je reçois des caméras comme

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 

ce que je suis à la recherche est un moyen de faire de se joindre à la première requête où je suis obtenir caméras d'utilisateur, de sorte que dans une requête, je peux obtenir tout e caméras appartenant à l'utilisateur et ainsi que ceux qui ont été partagés avec lui, As In camera_shares, j'ai le refernce de user_id et aussi camera_id.

Est-il possible de résoudre tout ce gâchis en une seule requête?

MISE À JOUR: les détails de 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 détails

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 

Répondre

0

Essayez de suivre

user_cameras = Camera.includes(:owner, :users).where(owner_id: current_user.id).order(:id).all 

En supposant que vous avez quelque chose comme suit dans camera.rb

has_one :owner, class_name: "User", foreign_key: "owner_id" 
has_many :cameras_shares 
has_many :users, through: cameras_shares 

ÉDITÉE

user_cameras = Camera.includes(:owner, :shares).where(owner_id: current_user.id).order(:id).all 
+0

êtes-vous sérieux? Je ne vois même pas de référence de camera_shares dans tout ça? – ijunaidfarooq

+0

S'il vous plaît lire attentivement la question et la réponse :) – ijunaidfarooq

+0

Pouvez-vous s'il vous plaît partager les associations mentionnées dans 'camera.rb' – Salil