繁体   English   中英

Rails 在连接表上连接条件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM