如何通过数组通过has_one通过关系查找所有记录

时间:2015-03-19 00:56:57

标签: ruby-on-rails ruby activerecord

我正在尝试查找属于一组客户的所有付款。付款通过与客户的账单关系有一个has_one。

模型包括:

class Payment < ActiveRecord::Base
  belongs_to :bill
  has_one :client, through: :bill

class Client < ActiveRecord::Base
  has_many :bills
  has_many :payments, through: :bills

class Bill < ActiveRecord::Base
  belongs_to :client
  has_many :payments

我试图通过以下查询找到

@payments = Payment.joins(:bills).where('bill.client_id IN (?)', [1,2,3,4])

但获取PG超时消息

尝试了.includes而不是.joins,并且还收到了PG超时消息

并尝试了

Payment.includes(:bill).where( bills: { 'client_id IN (?)', [1,2,3,4] } )

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

你的bill单数/复数是错误的。当你创建一个字符串时,它必须是表名,所以它将是复数。当您使用散列格式时,您使用与关联相同的大小写(从Payment使用时为单数)。所以:

Payment.joins(:bill).where( bills: { client_id: [1,2,3,4] } )