【问题标题】:getting data through association in Rails PG Sequel通过 Rails PG Sequel 中的关联获取数据
【发布时间】:2023-04-11 09:05:01
【问题描述】:

我有一张桌子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(与他们共享相机),我正在做的是,首先获取所有这些共享@987654328 @ 是current_user.id 然后得到所有那些camera_id 并通过它们我得到相机

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

【问题讨论】:

    标签: ruby-on-rails ruby postgresql sequel


    【解决方案1】:

    尝试关注

    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
    

    已编辑

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

    【讨论】:

    • 你是认真的吗?我什至没有看到任何对 camera_shares 的引用?
    • 能否分享camera.rb中提到的关联
    • 我已经添加了两个模型,它们是续集模型。
    • 检查我编辑的答案user_cameras.first.owner 会给你owner 的对象。 user_cameras.first.shares 将为您提供共享相机的所有用户的数组
    • 你不懂我 Salil 对不起
    猜你喜欢
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    相关资源
    最近更新 更多