Rails - DB层(PG)中的预处理

时间:2016-05-25 00:43:57

标签: ruby-on-rails json postgresql

鉴于我使用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很慢,而数据库则不然。

1 个答案:

答案 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)