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 と sentbox のクラスは

ActiveRecord::Relation::ActiveRecord_Relation_Conversation

しかし

(a.mailbox.inbox & active_conversations)

配列です

編集

a.mailbox.inbox JOINS SOMEHOW a.mailbox.sentbox のような単純なもので作業できるはずですが、理解できないようです。

4

1 に答える 1

1

する代わりに

(a.mailbox.inbox & active_conversations)

あなたはできるはずです

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

クラスConversation(およびその基になるconversationsテーブル) は、メールボックスのコードに従って正しいはずです。

ただし、これによりActiveRelation、配列ではなくオブジェクトが得られます。を使用して、これを純粋な SQL に変換できます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 に答える