Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2014
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 1.53 KB | None | 0 0
  1. def inbox_messages(user)
  2.  
  3.   user_id = user.id
  4.  
  5.   sub_query = """
  6.   SELECT
  7.     message_id
  8.   FROM (
  9.     SELECT
  10.       DISTINCT ON (conversation_id)
  11.       messages.id as message_id,
  12.       messages.conversation_id,
  13.       messages.from,
  14.       message_recipients.user_id as recipient_id,
  15.       conversations.subject,
  16.       message_recipients.id as message_recipient_id,
  17.       messages.created_at as message_created_at
  18.     FROM messages
  19.     JOIN conversations
  20.       ON conversations.id = messages.conversation_id
  21.     JOIN message_recipients
  22.       ON messages.id = message_recipients.message_id
  23.     JOIN (
  24.       -- this sub query gets all conversations where
  25.       -- user has been a recipient
  26.       SELECT
  27.         DISTINCT ON (conversation_id) conversation_id
  28.       FROM messages
  29.       JOIN message_recipients
  30.         ON message_recipients.message_id = messages.id
  31.       WHERE user_id = #{user_id}
  32.       AND conversation_id NOT IN (
  33.         SELECT
  34.           conversation_id
  35.         FROM user_archived_conversations
  36.         WHERE user_id = #{user_id}
  37.       )
  38.     ) as relevant_conversations
  39.       ON relevant_conversations.conversation_id = messages.conversation_id
  40.     WHERE message_recipients.user_id = #{user_id}
  41.       OR messages.from = #{user_id}
  42.     ORDER BY conversation_id, message_created_at DESC
  43.   ) as msg
  44.   -- ORDER BY message_created_at DESC #Ordering is being done in active record below
  45. """
  46.  
  47.   Message.where("id IN (#{sub_query})").order("created_at DESC")
  48.    
  49. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement