具有默认范围的预先加载关联会导致表别名不正确

时间:2014-12-29 20:47:01

标签: ruby-on-rails postgresql activerecord

我有3个型号:

class Company
  has_many :products
  has_many :variants, through: :products
end

class Product
  acts_as_paranoid
  belongs_to :company
  has_many :variants
end

class Variant
  acts_as_paranoid
  belongs_to :product
end

我正在使用偏执狂宝石,为每个模型添加默认范围:

default_scope { where deleted_at: nil }

当我尝试进行查询时:

company.variants.includes(:product).references(:products).where('products.name ilike ?', "%test%")

我收到错误:

PG :: UndefinedTable - 错误:对表"产品"的FROM子句条目的无效引用 第1行:... ucts_variants"。" id" ="变体"。" product_id" AND"产品" ...                                                              ^ 提示:也许您打算引用表别名" products_variants"。

完整查询:

SELECT COUNT(*)FROM" variants" INNER JOIN"产品" " products_variants" ON" products_variants"。" id" ="变体"。" product_id" AND"产品"。" deleted_at" IS NULL INNER JOIN"价格" ON"价格"。" variant_id" ="变种"。" id" INNER JOIN"产品" ON"变体"。" product_id" ="产品"。" id"在哪里"变种"。" deleted_at" IS NULL和"产品"。" deleted_at" IS NULL和"产品"。" company_id" = $ 1

如果我从Product和Variant模型中删除acts_as_paranoid,它可以正常工作。我猜表中的条件以某种方式导致AR创建表别名。这是rails中的错误吗?我该如何解决?感谢。

0 个答案:

没有答案