【发布时间】:2021-01-22 06:00:21
【问题描述】:
管理模型:
has_many :transport_vehicles_as_driver, class_name: "Transport::Vehicle",as: :driver
has_many :transport_vehicles_as_attendant, class_name: "Transport::Vehicle",as: :attendant
relation_1 = Admin.where(category: "TRANSPORT").left_outer_joins(:transport_vehicles_as_attendant).where("transport_vehicles.reference_code LIKE ?", "%#{keyword}%").distinct
relation_2 = Admin.where(category: "TRANSPORT").left_outer_joins(:transport_vehicles_as_driver).where("transport_vehicles.reference_code LIKE ?", "%#{keyword}%").distinct
relation_1.or(relation_2) 产生以下错误:
ArgumentError (Relation passed to #or must be structurally compatible. Incompatible values: [:left_outer_joins])
我检查了以下关闭的 stackoverflow 源: Relation passed to #or must be structurally compatible. Incompatible values: [:references]
【问题讨论】:
-
您对这个查询的期望目标是什么?看起来你正在尝试做
UNION ALL。错误试图告诉您,您不能将left_outer_join与or一起使用,或者至少当这两个查询具有不同的left_outer_join值时。 -
是的,我正在尝试找到两个关系的联合..
-
我认为你应该能够在没有联合的情况下在一个查询中编写它。唯一需要做的就是在 SQL 中编写自定义左连接,而不是通过关联符号的“rails”方式。它可能看起来像
.joins("LEFT JOIN (transport_vehicles.driver_id = admin.id AND transport_vehicles.driver_type='Admin') OR (transport_vehicles.attendant_id = admin.id AND transport_vehicles.attendant_type='Admin') ")或类似的东西,我只是在猜测列名。
标签: ruby-on-rails