Ruby on rails 使用rubyonrails/activerecord进行复杂的联合查询
我有 返回我需要的部分内容 我想要 (a.mailbox.inbox和活动对话)和a.mailbox.sentbox 但是我需要它作为SQL,这样我就可以高效地对它进行排序。我想通过('updated_at')订购 我尝试过连接和其他方法,但都不起作用。(a.mailbox.inboxa)和sentbox的类是Ruby on rails 使用rubyonrails/activerecord进行复杂的联合查询,ruby-on-rails,ruby,ruby-on-rails-4,mailboxer,Ruby On Rails,Ruby,Ruby On Rails 4,Mailboxer,我有 返回我需要的部分内容 我想要 (a.mailbox.inbox和活动对话)和a.mailbox.sentbox 但是我需要它作为SQL,这样我就可以高效地对它进行排序。我想通过('updated_at')订购 我尝试过连接和其他方法,但都不起作用。(a.mailbox.inboxa)和sentbox的类是 a = Profile.last a.mailbox.inbox a.mailbox.sentbox active_conversations = [IDS OF ACTIVE CONV
a = Profile.last
a.mailbox.inbox
a.mailbox.sentbox
active_conversations = [IDS OF ACTIVE CONVERSATIONS]
a.mailbox.inbox & active_conversations
但是
是一个数组
编辑
像a.mailbox.inbox这样简单的东西以某种方式加入了a.mailbox.sentbox,我应该可以使用它,但我似乎也不知道该怎么做。
(a.mailbox.inbox & active_conversations)
你应该能做到
(a.mailbox.inbox & active_conversations)
我相信根据邮箱代码,Conversation
类(及其底层的conversations
表)应该是正确的
但是,这将为您提供一个ActiveRelation
对象,而不是一个数组。您可以使用to\u SQL
将其转换为纯SQL。因此,我认为类似的方法应该可以工作:
a.mailbox.inbux.where('conversations.id IN (?)', active_conversations)
你能提供模型中描述的关联吗?我使用的是mailboxer@Vapire,如果这还不够信息,你能给我更详细的说明如何给你想要的信息吗?你希望你想要的结果只是一个结果集吗?是的,你完全正确!有一件有趣的事情需要注意,rails是ord自动按id排序并破坏查询,因此我唯一更改使其正常工作的是添加了reorder--so a.mailbox.sentbox.reorder(“”).to_sql--我还应该添加一个是返回哈希数组,我不知道如何使哈希正常运行。我认为我们的rn。
a.mailbox.inbux.where('conversations.id IN (?)', active_conversations)
# 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")