鉴于我使用Postgres并使用此方法:
def undelivered_messages(datetime)
messages = {}
@current_user.conversations.includes(:user_messages).each do |c|
messages[c.id] = c.user_messages.where('user_id != ? AND created_at > ?', @current_user.id, datetime)
end
JSON.generate(messages)
end
我希望这个输出看起来像(不计算JSON.generate()):
{1=>[m1,m2,m3], 2=>[m1,m2,m3]}
我想知道,我可以通过DB级别的一些SQL查询来做这件事,所以DB准备哈希(或JSON对象),它想要更快,因为Ruby很慢,而数据库则不然。
答案 0 :(得分:0)
UserMessage
.joins(:conversation)
.where('user_messages.user_id != ? AND user_messages.created_at > ?', @current_user.id, datetime)
.where(conversations: { user_id: @current_user.id })
.group_by(&:conversation_id)