1

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 種類のコルスを持つことができないため、無効な結果が得られました。

誰かがそれで私を助けることができれば、私は感謝します:)

前もって感謝します、

4

1 に答える 1

0

Rails の問題を見つけました: https://github.com/rails/rails/issues/3882と、問題を解決する「alarribeau」の回避策。これは修正ではありませんが、あなたを助けることができます.

于 2013-04-03T10:13:05.030 に答える