2014-07-17 57 views
2

我有很多客户的公司。客户has_many消息。消息具有文本属性。如何从一个模型中获取一个基于关联到另一个模型的ID列表

我试图从没有在消息的文本属性中包含特定单词的客户获取customer_ids的列表。这是我到目前为止有:

company.customers.includes(:messages).references(:messages).where('messages.text NOT LIKE ?', "% summer %") 

,当我做到这一点,得到该组中的客户的数量,这是正确的号码(7500),但是当我去掐了IDS像这样:

company.customers.includes(:messages).references(:messages).where('messages.text NOT LIKE ?', "% summer %").pluck(:id).count 

返回80000分一样的结果,这是不正确

我到底做错了什么?

编辑:

PG::AmbiguousColumn: ERROR: column reference "id" is ambiguous 
LINE 1: SELECT id FROM "customers" LEFT OUTER JOIN "messages" ON "me... 
      ^
: SELECT id FROM "customers" LEFT OUTER JOIN "messages" ON "messages"."customer_id" = "customers"."id" WHERE "customers"."company_id" = $1 AND (messages.text NOT LIKE '% summer %') 
PG::AmbiguousColumn: ERROR: column reference "id" is ambiguous 
LINE 1: SELECT id FROM "customers" LEFT OUTER JOIN "messages" ON "me... 
      ^
: SELECT id FROM "customers" LEFT OUTER JOIN "messages" ON "messages"."customer_id" = "customers"."id" WHERE "customers"."company_id" = $1 AND (messages.text NOT LIKE '% summer %') 
ActiveRecord::StatementInvalid: PG::AmbiguousColumn: ERROR: column reference "id" is ambiguous 
LINE 1: SELECT id FROM "customers" LEFT OUTER JOIN "messages" ON "me... 
+0

如果删除了'.references什么:从查询'(消息)? ('.joins'触发一个'INNER JOIN'来创建重复项,'.includes'触发'LEFT OUTER JOIN'不会创建重复项) – MrYoshiji

+0

但我没有使用.joins ...我会在哪里放置? –

+0

只需尝试'company.customers.includes(:messages).where('messages.text NOT LIKE?',“%summer%”)。count'来查看它是否有效。如果是这样,我会发布解决问题的答案,这里 – MrYoshiji

回答

0

刚刚链ids到您的查询的末尾:从试图回答错误

company.customers.includes(:messages).references(:messages).where('messages.text NOT LIKE ?', "% summer %").ids 

你也应该能够去除引用:

company.customers.includes(:messages).where('messages.text NOT LIKE ?', "% summer %").ids 
+0

不起作用。 (编辑中显示) –

+0

还应该提及它应该是“company.customers”而不是“company.customer”...这是我的错误..修正了编辑 –

+0

我不断收到模棱两可的错误 –

1

试穿:

company.customers.includes(:messages).references(:messages).where('messages.text NOT LIKE ?', "% summer %").distinct.pluck(:id).count 
0

查询(客户,消息)中有相同的“id”字段,因此您需要添加一个id字段来对其进行排序。您可以添加重新排序(:id),以便按客户ID排序。

试试这个:

相关问题