Skip to content
Extraits de code Groupes Projets
Valider 0ffb83d3 rédigé par Benjamin Neff's avatar Benjamin Neff Validation de Dennis Schubert
Parcourir les fichiers

load conversations and visibilities in one query with correct order

parent 735d692a
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -5,35 +5,41 @@ class ConversationsController < ApplicationController ...@@ -5,35 +5,41 @@ class ConversationsController < ApplicationController
respond_to :html, :mobile, :json, :js respond_to :html, :mobile, :json, :js
def index def index
@conversations = current_user.conversations.paginate( @visibilities = ConversationVisibility.includes(:conversation)
:page => params[:page], :per_page => 15) .order("conversations.updated_at DESC")
.where(person_id: current_user.person_id)
@visibilities = current_user.conversation_visibilities.paginate( .paginate(page: params[:page], per_page: 15)
:page => params[:page], :per_page => 15)
if params[:conversation_id]
@conversation = Conversation.joins(:conversation_visibilities).where( @conversation = Conversation.joins(:conversation_visibilities)
:conversation_visibilities => {:person_id => current_user.person_id, :conversation_id => params[:conversation_id]}).first .where(conversation_visibilities: {
person_id: current_user.person_id,
@unread_counts = {} conversation_id: params[:conversation_id]
@visibilities.each { |v| @unread_counts[v.conversation_id] = v.unread } }).first
@first_unread_message_id = @conversation.try(:first_unread_message, current_user).try(:id) if @conversation
@first_unread_message_id = @conversation.first_unread_message(current_user).try(:id)
if @conversation @conversation.set_read(current_user)
@conversation.set_read(current_user) end
end end
@conversations = []
@unread_counts = {}
@authors = {} @authors = {}
@conversations.each { |c| @authors[c.id] = c.last_author }
@ordered_participants = {} @ordered_participants = {}
@conversations.each { |c| @ordered_participants[c.id] = (c.messages.map{|m| m.author}.reverse + c.participants).uniq } @visibilities.each {|v|
@unread_counts[v.conversation_id] = v.unread
c = v.conversation
@conversations << c
@authors[c.id] = c.last_author
@ordered_participants[c.id] = (c.messages.map(&:author).reverse + c.participants).uniq
}
gon.contacts = contacts_data gon.contacts = contacts_data
respond_with do |format| respond_with do |format|
format.html format.html
format.json { render :json => @conversations, :status => 200 } format.json { render json: @conversations, status: 200 }
end end
end end
......
...@@ -67,8 +67,8 @@ class User < ActiveRecord::Base ...@@ -67,8 +67,8 @@ class User < ActiveRecord::Base
has_many :blocks has_many :blocks
has_many :ignored_people, :through => :blocks, :source => :person has_many :ignored_people, :through => :blocks, :source => :person
has_many :conversation_visibilities, -> { order 'updated_at DESC' }, through: :person has_many :conversation_visibilities, through: :person
has_many :conversations, -> { order 'updated_at DESC' }, through: :conversation_visibilities has_many :conversations, through: :conversation_visibilities
has_many :notifications, :foreign_key => :recipient_id has_many :notifications, :foreign_key => :recipient_id
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
- else - else
#no_conversations #no_conversations
= t('.no_messages') = t('.no_messages')
= will_paginate @conversations, :previous_label => '&laquo;', :next_label => '&raquo;', :inner_window => 1, :renderer => WillPaginate::ActionView::BootstrapLinkRenderer = will_paginate @visibilities, :previous_label => "&laquo;", :next_label => "&raquo;", :inner_window => 1, :renderer => WillPaginate::ActionView::BootstrapLinkRenderer
.span8 .span8
- if @conversation - if @conversation
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter