多态关系混淆

时间:2016-10-02 05:32:42

标签: mysql ruby-on-rails ruby activerecord

所以我对ActiveRecord如何处理这个问题感到困惑,希望有人能给我一些见解。

我有一个具有多态关系的表。我们称之为表选择。我在那里定义了:

belongs_to :chooseable, polymorphic: true

我有两个型号,让我们拨打一部电影,另一部分播放。在那里,我有:has_many :choices as: chooseable, dependent: destroy

在具有多态关系的模型中,我有两个范围:

  scope :with_movies, -> {
    includes(:movies)
      .where("chooseable_type": "Measure")
  }
  scope :with_shows, -> {
    includes(:shows)
      .where(shows: { hidden: false })
  }

令我感到困惑的是,如果我说users.choices.with_movies,并且我遗漏了chooseable_type where条件,AR对我说:“

Unknown column 'choices.chooseable_type' in 'where clause': SELECT `movies`.* FROM `movies` WHERE `choices`.`chooseable_type` = 'Movie' AND `movies`.`id` IN (728) 

然而,在第二个范围with_shows中,我不需要定义chooseable_type - 它工作正常。更令人困惑的是,如果我删除where子句,with_shows也不行。

我真的不明白为什么第二个范围中的where子句允许生成正确的查询,但没有它,它就落在了它的面前。

1 个答案:

答案 0 :(得分:0)

问题在于Rails尝试为您构建最终的复杂查询,并且它可以解析

.where("chooseable_type": "Measure")

这是最好的假设,这是此查询的主表。帮助它不会失败,明确指定表名:

.where("movies.chooseable_type": "Measure")