Rails 3.2.8 を使用していますが、ポリモーフィックな関連付けに問題があります。私は、asset_file、伝記、dynamic_annotation、または引用である可能性のある別のポリモーフィック モデルの貢献に関連するポリモーフィックなモデル アクティビティを持っています。
つまり、祖父は活動です...父は貢献であり、最後に(貢献の)息子は伝記、asset_file、dynamic_annotations、またはcitationsです。
私は、次のコードを持っているこれらの概念をすべて集約する私のモデルのものです:
has_many :activities,
:order => 'created_at DESC',
:dependent =>:delete_all
has_many :contributions,
:through => :activities,
:source => :activable,
:source_type => "Contribution"
has_many :dynamic_annotations,
:through => :contributions,
:source => :contributable,
:source_type => "DynamicAnnotation",
:conditions => {"contributions.c_state" => "ACCEPTED"}
has_many :biographies,
:through => :contributions,
:source => :contributable,
:source_type => "Biography",
:conditions => {"contributions.c_state" => "ACCEPTED"}
has_many :citations,
:through => :contributions,
:source => :contributable,
:source_type => "Citation",
:conditions => {"contributions.c_state" => "ACCEPTED"}
has_many :asset_files,
:through => :contributions,
:source => :contributable,
:source_type => "AssetFile",
:conditions => {"contributions.c_state" => "ACCEPTED"}
問題: コンソールを開き、次のクエリを入力しました。
Thing.first.biographies
私が得たSQL:
SELECT `biographies`.* FROM `biographies` INNER JOIN `contributions` ON `biographies`.`id` = `contributions`.`contributable_id` INNER JOIN `activities` ON `contributions`.`id` = `activities`.`activable_id` WHERE `activities`.`thing_id` = 1 AND `activities`.`activable_type` = 'Contribution' AND (`contributions`.`c_state` = 'ACCEPTED') AND (`contributions`.`contributable_type` = 'Biography')
それが正解です
次に、コマンドの後に入力しました:
Thing.first.dynamic_annotations
私が得たSQL:
SELECT `dynamic_annotations`.* FROM `dynamic_annotations` INNER JOIN `contributions` ON `dynamic_annotations`.`id` = `contributions`.`contributable_id` INNER JOIN `activities` ON `contributions`.`id` = `activities`.`activable_id` WHERE `activities`.`thing_id` = 1 AND `activities`.`activable_type` = 'Contribution' AND (`contributions`.`c_state` = 'ACCEPTED') AND (`contributions`.`contributable_type` = 'Biography' AND `contributions`.`contributable_type` = 'DynamicAnnotation')
オブジェクトは 2 種類のコルスを持つことができないため、無効な結果が得られました。
誰かがそれで私を助けることができれば、私は感謝します:)
前もって感謝します、