1

Tracker::Db::Service次の関連付けを持つクラスがあります。

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

そして、Tracker::Db::Linkこれらの関連付けがあります:

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_order_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_workorder.target_object_id になるだけです。両方の関係でこれを行っていますwork_order_targets, work_order_sources

Tracker::Db::Service持っid, name
Tracker::Db::Linksource_object_id, source_key, target_object_id, target_key
Tracker::Db::WorkOrderいるid, name

残念ながら、これはサード パーティのアプリケーション データベース (オープン ソース プロジェクト、OTRS + ITSM モジュール) であるため、構造を実際に制御することはできません。Rails アプリを接続するだけです。

4

0 に答える 0