[英]Rails Joins with Condition on Joined Table
我正在使用 Rails 6。我有一个Order
表和一个Address
表。 Order
has_many :addresses
。 每个订单都包含对两个地址字段的引用,一个用于计费,另一个用于运输。 如果发货记录与账单记录相同,则发货地址记录的same_as_billing
字段设置为true
,并且所有地址数据都存储在账单地址记录中。
我正在尝试查询所有具有逻辑送货地址且国家/地区设置为“美国”的订单。 我通常会使用这样的常规连接来完成此操作:
Order.all.joins(:addresses).where(addresses: {address_type: "Shipping", country: "United States"})
但是,由于某些送货地址可能被标记为same_as_billing = true
,因此实际上没有任何地址数据存储在这些记录中,而是存储在帐单地址记录中。 我不确定如何查询送货地址记录,然后在same_as_billing = true
有条件地加入帐单地址记录。 每个Order
总是有两个地址关联。
据我了解,您应该能够使用or
查询来实现这一点。
shipping_addresses = Order.all.joins(:addresses).where(addresses: { address_type: 'Shipping', country: 'United States' })
billing_addresses = Order.all.joins(:addresses).where(addresses: { address_type: 'Billing', country: 'United States', same_as_billing: true })
valid_addresses = shipping_addresses.or(billing_addresses)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.