【问题标题】:Rails Joins with Condition on Joined TableRails 在连接表上加入条件
【发布时间】:2020-11-06 22:50:32
【问题描述】:

我正在使用 Rails 6。我有一个 Order 表和一个 Address 表。 Orderhas_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 总是有两个地址关联。

【问题讨论】:

  • 我认为您想要 EXISTS 子查询之类的东西 - 请告诉我们您正在使用什么数据库并提供模型示例,以便我们可以对其进行测试,而无需从头开始重新创建所有内容?

标签: sql ruby-on-rails ruby-on-rails-6


【解决方案1】:

据我了解,您应该可以使用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)

【讨论】:

    猜你喜欢
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 2016-12-19
    • 2020-04-16
    相关资源
    最近更新 更多