【问题标题】:Rails polymorphic associations - has_many condition errorRails 多态关联 - has_many 条件错误
【发布时间】:2013-04-01 16:27:25
【问题描述】:

我使用的是 rails 3.2.8,但在多态关联方面遇到了一些问题。 我有一个模型活动,它是多态的,它与另一个多态模型贡献相关,可以是资产文件、传记、动态注释或引用。

因此,祖父是活动...父亲是贡献,最后(贡献的)儿子是传记、资产文件、动态注释或引用。

我的模型集合了所有这些概念,我有下一个代码:

  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')

我得到了一个 void 结果,因为该对象不能有两种类型的 corse。

如果有人可以帮助我,我会很感激:)

提前致谢,

【问题讨论】:

    标签: ruby-on-rails activerecord polymorphic-associations has-many-polymorphs


    【解决方案1】:

    我发现了一个 rails 问题:https://github.com/rails/rails/issues/3882 使用“alarribeau”的解决方法解决了这个问题。这不是一个修复,但它可以帮助你。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-16
      • 1970-01-01
      相关资源
      最近更新 更多