我有两种模式:
user.rb
class User < ApplicationRecord
has_many :orders, inverse_of: :user, dependent: :restrict_with_exception
end
order.rb
class Order < ApplicationRecord
belongs_to :user, inverse_of: :orders
end
我正在使用includes
where
,如下所示:
User.where(id: selected_salesmen.pluck(:id))
.includes(:orders)
.where("order.booked_at > ? AND order.booked_at < ?",
booked_at_gteq,
booked_at_lteq)
但是,它没有向我users
提供orders
。任何解释为什么这不起作用?
答案 0 :(得分:1)
这可能会在方法includes
和joins
之间产生一些混淆,这些方法具有相关但却截然不同的含义。
includes
会急切加载相关记录,以防止以后多次调用数据库。它主要用于性能调优。joins
将包含数据库查询中相关表的连接,允许您根据相关模型构建条件。请注意,要使用联接,您需要引用表名,而不是关系名。默认情况下,ActiveRecord将连接到一个表,该表是模型的复数名称。
因此,更改包括连接和'订单'到'订单':
User.where(id: selected_salesmen.pluck(:id))
.joins(:orders)
.where(
"orders.booked_at > ? AND orders.booked_at < ?",
booked_at_gteq,
booked_at_lteq
)
您可能还想检查selected_salesmen.pluck(:id)
是否也会返回一些ID。