Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用rubyonrails/activerecord进行复杂的联合查询_Ruby On Rails_Ruby_Ruby On Rails 4_Mailboxer - Fatal编程技术网

Ruby on rails 使用rubyonrails/activerecord进行复杂的联合查询

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.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 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")