![](/img/trans.png)
[英]SQL / RoR ActiveRecord Aggregation Querying Through has_many Relationship
[英]ActiveRecord fetching records from has_many and related relationship through scopes
我有兩個模型: Customer
和Order
。 有時,兩個客戶實際上是同一位客戶,這可能是由其中一個客戶擁有一個master_id
指向另一個客戶記錄來表示的。 在為客戶獲取訂單時,我還想從從屬客戶那里獲取訂單(即那些聲稱要查詢的客戶的是其主客戶記錄)。
所以:
Customer1: id: 1, master_id: nil, orders: [Order1, Order2]
Customer2: id: 2, master_id: 1, orders: [Order3]
查詢Customer1.all_orders
應該返回所有3個Order
對象
我知道如何通過一種方法來執行此操作-抽取從屬客戶的ID,將原始客戶的ID添加到數組中,然后查找其customer_id在此數組中的Orders:
has_many :slave_records, class_name: 'Customer', foreign_key: 'master_id'
def all_orders
order_ids = slave_records.map(&:id).push(id)
Order.where(customer_id: order_ids)
end
但是有沒有辦法使用范圍和關系來做到這一點? 是Rails 4(我知道Rails 5應該在其ActiveRecord版本中具有OR東西)。
在Order模型中添加范圍將使您更接近所需的范圍。
class Order
scope :for_master, -> (master) { where("customer_id = #{master.id} OR customer_id IN (?)", master.slave_records.select(:id)) }
end
因此,對於任何主要客戶,調用示波器,您也將獲得兒童訂單。
Order.for_master(customer)
您將無法致電customer.all_orders
。 但是,您將能夠以更簡潔的方式獲得所有結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.