0

我有

a = Profile.last
a.mailbox.inbox
a.mailbox.sentbox
active_conversations = [IDS OF ACTIVE CONVERSATIONS]

a.mailbox.inbox & active_conversations 

返回我需要的部分内容

我想

(a.mailbox.inbox & active_conversations) 和 a.mailbox.sentbox

但我需要它作为 SQL,以便我可以有效地订购它。我想通过 ('updated_at') 订购

我尝试过加入和其他事情,但它们不起作用。(a.mailbox.inboxa 和 sendbox 的类是

ActiveRecord::Relation::ActiveRecord_Relation_Conversation

(a.mailbox.inbox & active_conversations)

是一个数组

编辑

像 a.mailbox.inbox 以某种方式加入 a.mailbox.sentbox 这样简单的东西我应该能够使用,但我似乎也无法弄清楚。

4

1 回答 1

1

而不是做

(a.mailbox.inbox & active_conversations)

你应该能够做到

a.mailbox.inbux.where('conversations.id IN (?)', active_conversations)

我相信根据邮箱代码,Conversation该类(及其基础表)应该是正确的。conversations

然而,这给了你一个ActiveRelation对象而不是一个数组。您可以使用to_sql. 所以我认为这样的事情应该有效:

# get the SQL of both statements
inbox_sql = a.mailbox.inbux.where('conversations.id IN (?)', active_conversations).to_sql
sentbox_sql = a.mailbox.sentbox.to_sql

# use both statements in a UNION SQL statement issued on the Conversation class
Conversation.from("#{inbox_sql} UNION #{sentbox_sql} ORDER BY id AS conversations")
于 2014-06-25T19:04:30.677 回答