Huy*_*Huy 47 ruby-on-rails psql ruby-on-rails-4
我有两个型号,Courier和Order.
我在下面有以下查询:
active_couriers = Courier.
available_courier_status.
where(:service_region_id => @service_region.id).
includes(:orders)
Run Code Online (Sandbox Code Playgroud)
但是,此查询有效,它会提取所有订单.我想将订单限制为当天的订单.所以我添加了以下查询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)
Run Code Online (Sandbox Code Playgroud)
这给了我错误:
PG::UndefinedTable: ERROR: missing FROM-clause entry for table "orders"
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么?
Dan*_*nor 80
嗯,看起来你正试图包括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)
Run Code Online (Sandbox Code Playgroud)
mat*_*gel 11
您还可以使用eager_load提供与includes+ 相同的确切行为references.它在作为参数传递的表上执行相同的Left Outer Join,但是以更清晰的方式执行.
文档: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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40546 次 |
| 最近记录: |