活动记录连接两个表与where

时间:2016-02-02 14:35:24

标签: ruby-on-rails activerecord

我有一个模特

class PatientProfile < ActiveRecord::Base
  has_many :friendships

  with_options through: :friendships, source: :friend do |model|
    model.has_many :friends, -> { where(friendships: { status: 'accepted'}) }
    model.has_many :friend_requests, -> { where(friendships: { status: 'requested'}) }
    model.has_many :requested_friendships, -> { where(friendships: { status: 'requestor'}) }
  end

uids = ["123", "456"]

我想查询PatientProfile以查找uid在uids数组中的所有记录,并且两个用户之间没有友谊记录。

这应该可以通过加入,但我在documentation

中被绊倒了

编辑:

uid位于PatientProfile

Friendships表格中有两列,friend_idpatient_profile_id。我只想PatientProfile friend列表中uids不在patient_profile_id,而return (((vat_part(discount_percent, date, options) + non_vat_part(discount_percent, date, options))*1.2).round(2)/1.2).round(rounded ? 2 : 1000) 不在,{1}}。{/ 1>

1 个答案:

答案 0 :(得分:0)

我们错过了一些关于你没有友谊记录的意思的背景,但是如果你正在寻找记录,那么与uids建立友谊就是:

PatientProfile.includes(:friendships).where(uid: [123, 456], friendships: {id: nil})

<强>更新

或者如果您更喜欢范围版本:

scope :no_friendships, -> { includes(:friendships).where(friendships: {id: nil}) }

现在你可以这样做:

PatientProfile.no_friendships.where(uid: [123, 456])