Ruby on rails Rails关联单独工作,但不在包含/连接上工作

Ruby on rails Rails关联单独工作,但不在包含/连接上工作,ruby-on-rails,associations,Ruby On Rails,Associations,我有一个具有以下关联的类跟踪器::Db::服务: has_many :source_links, class_name: :Link, foreign_key: :source_key, conditions: [ 'state_id = 1 AND source_object_id = 3' ] has_many :target_links, class_name: :Link, foreign_key: :target_key, conditions: [ 'state_id = 1 AND

我有一个具有以下关联的类跟踪器::Db::服务:

has_many :source_links, class_name: :Link, foreign_key: :source_key, conditions: [ 'state_id = 1 AND source_object_id = 3' ]
has_many :target_links, class_name: :Link, foreign_key: :target_key, conditions: [ 'state_id = 1 AND target_object_id = 3' ]
has_many :work_order_targets, through: :source_links, source: :work_order_as_target, class_name: :WorkOrder
has_many :work_order_sources, through: :target_links, source: :work_order_as_source, class_name: :WorkOrder
belongs_to :work_order_as_target, class_name: :WorkOrder, foreign_key: :target_key, conditions: [ 'target_object_id = 11' ]
belongs_to :work_order_as_source, class_name: :WorkOrder, foreign_key: :source_key, conditions: [ 'source_object_id = 11' ]
然后Tracker::Db::Link具有以下关联:

has_many :source_links, class_name: :Link, foreign_key: :source_key, conditions: [ 'state_id = 1 AND source_object_id = 3' ]
has_many :target_links, class_name: :Link, foreign_key: :target_key, conditions: [ 'state_id = 1 AND target_object_id = 3' ]
has_many :work_order_targets, through: :source_links, source: :work_order_as_target, class_name: :WorkOrder
has_many :work_order_sources, through: :target_links, source: :work_order_as_source, class_name: :WorkOrder
belongs_to :work_order_as_target, class_name: :WorkOrder, foreign_key: :target_key, conditions: [ 'target_object_id = 11' ]
belongs_to :work_order_as_source, class_name: :WorkOrder, foreign_key: :source_key, conditions: [ 'source_object_id = 11' ]
当我尝试从一个实例遍历这些关联时,例如:service.work\u order\u targets,它可以完美地工作。

然而,如果我试图在查询中包含/加入这些,我会遇到问题

Tracker::Db::Service.includes(:work_order_targets).limit(10)

Mysql2::Error: Unknown column 'target_object_id' in 'where clause': SELECT `change_workorder`.* FROM `change_workorder`  WHERE `change_workorder`.`id` IN (4262, 4239, 4058, 4062, 4258, 4242, 4240, 4256, 4241, 4253) AND (( target_object_id = 11))
它正在错误地生成查询。 我尝试使用哈希语法来指定条件,但这也不起作用,它只是变成了change\u workorder.target\u object\u id。它在两个关系work\u order\u目标、work\u order\u源上都这样做

Tracker::Db::服务具有id、名称 Tracker::Db::Link具有源\对象\ id、源\键、目标\对象\ id、目标\键 Tracker::Db::WorkOrder具有id、名称


不幸的是,这是一个第三方应用程序数据库开放源代码项目,OTRS+ITSM模块,因此我无法真正控制结构,我只是将Rails应用程序连接到其中。

您是否尝试过以下跟踪器::Db::服务。包括:target\u links=>:work\u order\u as\u target.limit10?因为您的条件是关于不同表的列,所以您应该在条件字符串中精确指定它们:`conditions:['services.state_id=1和links.source_object_id=3']`这样,您就更清楚地需要在查询中加入或选择性地包括:links。注意join和include,在处理相关记录时需要加入,而在希望加载时需要包含。如果需要,您应该加入并包括在这样的条件中同时输入表名,这样会导致复杂查询问题,因为表在加入时会出现别名,使用条件的哈希语法可以修复这一问题。特别是通过源链接/目标链接加入也无法解决此问题。这基本上是发生在has_many上的事情:无论如何,通过关联。哦,是的,我没有想到别名问题,我的错。我的观点是,Tracker::Db::Service.scoped本身就是问题所在,因为它是在外部表上进行调节的。您是否尝试加入并包括:工作订单目标?includes:association不允许查询关联,只是它的即时加载我实际上没有尝试查询它,只是尝试获取即时加载。但是加入和/或包含都会引发异常。但是您正在查询链接,因为您的条件位于links表的列上。你能试试Tracker::Db::Service.joins:target\u links.includes:work\u order\u targets.limit10吗。