如何通过数组通过关系查找所有记录
问题描述:
我正在尝试查找属于客户端数组的所有付款。通过与客户之间的账单关系,付款有一个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] })
感谢您的帮助。
答
你有你的bill
单数/复数错误的方式。当你创建一个字符串时,它必须是表名,所以它将是复数形式。当您使用散列格式时,您可以使用与您的关联相同的大小写(从Payment
中单独使用)。所以:
Payment.joins(:bill).where(bills: { client_id: [1,2,3,4] })
你的数据库有多大?你有bill_id的索引吗?即它只是窒息你有多少数据? – 2015-03-19 01:02:51
另外 - 你有一个客户协会的付款...你试过类似'Payment.joins(:client).where(“clients.id”=> [1,2,3,4])' – 2015-03-19 01:04:06
在dev ,没有太多的记录,但是在账单表上有一个client_id的索引,我尝试了客户端上的连接,但是它也超时了 – Steve 2015-03-19 01:14:13