【问题标题】:PG::UndefinedTable: ERROR: missing FROM-clause entry for table when using joins and wherePG::UndefinedTable: 错误:在使用连接时缺少表的 FROM 子句条目以及在哪里
【发布时间】:2014-09-25 19:18:35
【问题描述】:

我有两个模型,CourierOrder

我有以下查询:

active_couriers = Courier.
  available_courier_status.
  where(:service_region_id => @service_region.id).
  includes(:orders)

此查询有效,但是它会提取所有订单。我想将订单限制为当天的订单。所以我添加了以下查询where("orders.created_at >= ?", Time.zone.now.beginning_of_day)

active_couriers = Courier.
  available_courier_status.
  where(:service_region_id => @service_region.id).
  includes(:current_orders).
  includes(:orders).
  where("orders.created_at >= ?", Time.zone.now.beginning_of_day)

这给了我错误:

PG::UndefinedTable: ERROR:  missing FROM-clause entry for table "orders"

我在这里做错了什么?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 psql


    【解决方案1】:

    嗯,您似乎正在尝试包含 current_orders 并包含 order。这些是具有不同条件的相同表吗?这可能会混淆活动记录。另外,我很确定在引用连接表时包含 references 方法是明智的。也许,尝试这样的事情:

    active_couriers = Courier.includes(:orders)
      .available_courier_status
      .where(:service_region_id => @service_region.id)
      .where("orders.created_at >= ?", Time.zone.now.beginning_of_day)
      .references(:orders)
    

    【讨论】:

    • 谢谢。我猜你需要添加references
    • 这是一个救生员。由于关联的重命名,我不得不为 includesreferences 子句使用不同的名称,但见鬼,我只花了 3 分钟就找到了这个绝妙的答案。谢谢!
    • 添加引用为我解决了这个问题。非常感谢
    • 你可以在这里用Time.zone.today代替Time.zone.now.beginning_of_day
    【解决方案2】:

    您也可以使用eager_load 提供与includes + references 完全相同的行为。它对作为参数传递的表执行相同的左外连接,但方式更简洁。

    这里的文档:http://apidock.com/rails/v4.2.7/ActiveRecord/QueryMethods/eager_load

    根据这个例子:

    active_couriers = Courier.eager_load(:orders)
      .available_courier_status
      .where(:service_region_id => @service_region.id)
      .where("orders.created_at >= ?", Time.zone.now.beginning_of_day)
    

    【讨论】:

      【解决方案3】:

      确保在使用where 过滤之前提供.includes(:service_region)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-22
        • 2019-02-17
        • 2016-03-24
        • 2015-10-30
        • 2015-12-19
        • 2018-06-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多