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::Link
てsource_object_id, source_key, target_object_id, target_key
Tracker::Db::WorkOrder
いるid, name
残念ながら、これはサード パーティのアプリケーション データベース (オープン ソース プロジェクト、OTRS + ITSM モジュール) であるため、構造を実際に制御することはできません。Rails アプリを接続するだけです。