代码之家  ›  专栏  ›  技术社区  ›  Ronan Lopes

活动记录-多次连接同一表

  •  1
  • Ronan Lopes  · 技术社区  · 6 年前

    我有一个模型 A User 模型。我还有一个模型 B 模型和我的 用户 模型(这是两个不同的用户,比如医生和病人)。我想做的是这样的查询:

    B.joins(:user, {a: :user}).where("patient.name = 'some condition' or doctor.name='some other condition'")
    

    任何帮助都将不胜感激,谢谢!

    2 回复  |  直到 6 年前
        1
  •  0
  •   strivedi183    6 年前

    也许这样的事情能奏效?(我还没有测试代码)

    class User < ApplicationRecord
      has_many :doctors
      has_many :patients, through: :doctors
    end
    
    class Doctor < ApplicationRecord
      belongs_to :user
      has_many :patients
    end
    
    class Patient < ApplicationRecord
      belongs_to :doctor
      belongs_to :user
    end
    
    Patient.joins(user: {doctors: :user}).where("patient.name = 'some condition' or doctor.name='some other condition'")
    

        2
  •  0
  •   John Skiles Skinner    6 年前

    可以创建名为 Patient Doctor 继承自 User ,然后将用户称为患者和医生,而不是一般用户。

    class Doctor < User
      has_many :a
    end
    class Patient < User
      has_many :b
    end
    

    这是单表继承: https://api.rubyonrails.org/classes/ActiveRecord/Inheritance.html