簡體   English   中英

ActiveRecord通過作用域從has_many和相關關系中獲取記錄

[英]ActiveRecord fetching records from has_many and related relationship through scopes

我有兩個模型: CustomerOrder 有時,兩個客戶實際上是同一位客戶,這可能是由其中一個客戶擁有一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM