當我有一個子集(發票)的集合,並且我想找到所有父母(訂單)時,我該如何去做這件事?Rails 5需要找到與子集合關聯的所有父對象
所以要訂購has many :invoices
。
如何查找與發票集合關聯的所有訂單?
當我有一個子集(發票)的集合,並且我想找到所有父母(訂單)時,我該如何去做這件事?Rails 5需要找到與子集合關聯的所有父對象
所以要訂購has many :invoices
。
如何查找與發票集合關聯的所有訂單?
這應該做的伎倆:
invoices = some_logic_to_get_invoices
orders = Order.includes(:invoices).where(invoices: { id: invoices })
invoices.map(&:orders).uniq
這是最昂貴的(性能明智的)方式來做到這一點。另外,數組的數組應該是「平坦」的。不要讓Rails以一種非常有效的方式去做SQL可以做的事情 – MrYoshiji
成功!對於我來說,看起來有點奇怪,在'where'中你可以單獨要求* nested *'id'鍵給它一個集合(複數)作爲一個值。 –
@ Code-MonKy這是因爲'invoices'實際上是一個ActiveRecord :: Relation對象,它是一個範圍,然後Rails的ActiveRecord知道你想將這個範圍嵌套在where子句中。查看'Order.includes(:invoices).where(invoices:{id:invoices})。to_sql'。另外,如果'invoices'是一個數組,則必須'映射(&:id)'來執行顯式版本。 – MrYoshiji