Rails has_many 通过中间模型
Rails has_many through intermediate model
在 rails 中,是否有获取传递模型的方法。我们有以下模型结构。
一个客户有很多购买,一个购买有很多订单。客户和订单模型之间没有直接关系。它们可以通过购买模型链接。现在我想获取属于客户的所有订单。有没有一种方法可以通过单个查询来实现这一点。我们目前的模型看起来像。
Customer
- customer_id
Purchase
- purchase_id
- customer_id
Order
- order_id
- purchase_id
- status
我的用例是给定一个客户对象,列出处于特定状态的客户的所有订单(例如状态 = 'Complete')。
第 SQL 行看起来像
SELECT purchase_id, order_id FROM Customer c INNER JOIN Purchase p ON p.customer_id = c.customer_id INNER JOIN Order o ON o.purchase_id = p.purchase_id WHERE o.status = 'Complete';
你可以这样做:
Order.select('purchases.id AS purchase_id, orders.id AS order_id').joins(purchase: :customer).where('orders.status = ?', 'Complete')
希望对你有所帮助。
在 rails 中,是否有获取传递模型的方法。我们有以下模型结构。
一个客户有很多购买,一个购买有很多订单。客户和订单模型之间没有直接关系。它们可以通过购买模型链接。现在我想获取属于客户的所有订单。有没有一种方法可以通过单个查询来实现这一点。我们目前的模型看起来像。
Customer
- customer_id
Purchase
- purchase_id
- customer_id
Order
- order_id
- purchase_id
- status
我的用例是给定一个客户对象,列出处于特定状态的客户的所有订单(例如状态 = 'Complete')。
第 SQL 行看起来像
SELECT purchase_id, order_id FROM Customer c INNER JOIN Purchase p ON p.customer_id = c.customer_id INNER JOIN Order o ON o.purchase_id = p.purchase_id WHERE o.status = 'Complete';
你可以这样做:
Order.select('purchases.id AS purchase_id, orders.id AS order_id').joins(purchase: :customer).where('orders.status = ?', 'Complete')
希望对你有所帮助。