如何使用pluck从与class_name关联的模型中获取属性

时间:2017-01-09 17:58:16

标签: ruby-on-rails

我有一个Entry模型属于组织模型......两次。

MAIL FROM

我尝试编写单个AR查询,使用class Entry < ActiveRecord::Base belongs_to :organization belongs_to :temp_organization, class_name: "Organization" end 拉出关联的组织和temp_organization名称。

pluck

此崩溃时出现以下错误:

Entry
  .includes(:organization, :temp_organization)
  .pluck('organizations.name', 'temp_organizations.name')

哪个有意义 - 没有ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: missing FROM-clause entry for table "temp_organizations" 表,因为该关联是通过常规temp_organizations表管理的。

如何让organizations提取temp_organization名称?

2 个答案:

答案 0 :(得分:1)

尝试使用,

Entry
  .includes(:organization, :temp_organization)
  .references(:organization, :temp_organization)
  .pluck('organizations.name', 'entries_temp_organizations.name')

答案 1 :(得分:1)

因此,对于同一个表的多个连接,AR会做一些魔法并重命名表,这就是为什么你不能提取正确的表名。

您可以通过查看生成的sql来检查表名是什么:

Entry.includes(:organization, :temp_organization).to_sql

你应该得到类似的东西:

...INNER JOIN \"organizations\" \"entries_temp_organizations\" ON \"entries_temp_organizations\"...

我怀疑表名是&#39; entries_temp_organizations&#39; (遵循连接表的字母顺序的AR规则)。使用正确的表名称可以解决这个问题。