我有以下关联:
class User < ApplicationRecord
has_many :orders
end
class Order < ApplicationRecord
belongs_to :user
has_one :invoice
end
class Invoice < ApplicationRecord
belongs_to :order
has_one :receipt
end
class Receipt < ApplicationRecord
belongs_to :invoice
end
我想返回用户所有订单的所有收据。
如果这种关系一直是一对一的,那就很简单了:
user = User.find(...)
user.order.invoice.receipt
因为有很多订单,我发现自己想要映射和展平。我不想那样做。我似乎找不到可以帮助我真正理解这个概念的来源。我需要定义through
关系吗?我需要使用.joins
吗?
如何返回特定用户拥有的所有订单的发票收据?
这应该适合你:
Receipt.joins(invoice: { order: :user }).where(users: { id: user_id })
是的,您需要使用连接来生成正确的查询(连接所有表并添加您的用户限制)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句