如何按关联条件查询记录?

时间:2015-10-28 22:29:23

标签: ruby-on-rails postgresql activerecord

假设我有这些模型:

class Order
  belongs_to :guest
  has_many :line_items, inverse_of: :order
  has_many :tickets, through: :line_items
end

class Ticket
  belongs_to :guest
  belongs_to :line_item
end

我想在scope上创建一个Order,让我查询包含属于order's Guest的1张以上故障单的订单。一个例子:我下了3张票的订单,然后范围将返回该订单。如果我下了相同的订单,然后将2张门票转移到另外的Guest,那么我将不再匹配scope,因为count的门票tickets.guest_id = orders.guest_id只有1 (总共3个)。

我尝试过类似的事情:

scope :has_untransferred_tickets, -> { joins(:tickets).having('count(tickets.guest_id = orders.guest_id) > 1') }

但没有骰子。我在Postgres。谢谢你的帮助。一个scope非常重要,因此它会返回ActiveRecord::Relation Orders我可以链接的内容。

1 个答案:

答案 0 :(得分:0)

将故障单和订单访客比较移动到where子句,然后对返回的故障单总数执行计数。

bufferWithTime(200)