Rails活动记录#or必须是结构兼容的查询



我需要查询所有具有programsfuture_end_date_sessionsproducts或具有pathsfuture_end_date_sessions的所有产品

关联如下:

Product :
belongs_to :learning_item, polymorphic: true
has_one :self_ref, class_name: to_s, foreign_key: :id
has_one :program, through: :self_ref, source: :learning_item, source_type: 'Program'
has_one :path, through: :self_ref, source: :learning_item, source_type: 'Path'
Program has_many sessions
Path has_many sessions

我得到了以下查询:

Product.joins(program: :future_end_date_sessions).or(
Product.joins(path: :future_end_date_sessions)
)

但是我得到以下错误ArgumentError: Relation passed to #or must be structurally compatible. Incompatible values: [:joins]如何解决这个问题?

所以实际的问题是Product.joins(program: :future_end_date_sessions)Product.joins(path: :future_end_date_sessions)有不同的JOIN标准,因此不能合并在一起。

我认为最简单的解决方法是

Product.where(id: Product.joins(program: :future_end_date_sessions).select(:id).distinct)
.or(Product.where(id: Product.joins(path: :future_end_date_sessions).select(:id).distinct))

这将导致使用两个子查询从当前连接条件中提取必要的Product id的OR条件。

或者,我们可以使用Arel创建一个连接,但是我不知道:future_end_date_sessions是什么,也不知道它是如何工作的,所以我不确定如何实现这一点。

相关内容

  • 没有找到相关文章

最新更新