diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb index 92b85d6..70578e2 100644 --- a/app/controllers/messages_controller.rb +++ b/app/controllers/messages_controller.rb @@ -46,8 +46,8 @@ def calculate_navigation_links end # Find previous/next thread (root messages) - @prev_thread = Message.where(list_id: @list, parent_id: nil).where('id < ?', root.id).order(id: :desc).first - @next_thread = Message.where(list_id: @list, parent_id: nil).where('id > ?', root.id).order(:id).first + @prev_thread_seq = Message.where(list_id: @list, parent_id: nil).where('id < ?', root.id).order(id: :desc).pick(:list_seq) + @next_thread_seq = Message.where(list_id: @list, parent_id: nil).where('id > ?', root.id).order(:id).pick(:list_seq) # Get all messages in this thread thread_messages = Message.with_recursive( @@ -55,12 +55,12 @@ def calculate_navigation_links Message.where(id: root.id), Message.joins('inner join thread_msgs on messages.parent_id = thread_msgs.id') ] - ).joins('inner join thread_msgs on thread_msgs.id = messages.id').order(:id).to_a + ).joins('inner join thread_msgs on thread_msgs.id = messages.id').order(:id).pluck(:id, :list_seq) # Find previous/next message in thread - current_index = thread_messages.index {|m| m.id == @message.id } - @prev_message_in_thread = thread_messages[current_index - 1] if current_index && current_index > 0 - @next_message_in_thread = thread_messages[current_index + 1] if current_index + current_index = thread_messages.index {|(id, _)| id == @message.id } + @prev_message_in_thread_seq = thread_messages[current_index - 1]&.last if current_index && current_index > 0 + @next_message_in_thread_seq = thread_messages[current_index + 1]&.last if current_index end def render_threads(yyyymm: nil, q: nil) diff --git a/app/views/messages/_message.html.erb b/app/views/messages/_message.html.erb index 67dc989..29901ab 100644 --- a/app/views/messages/_message.html.erb +++ b/app/views/messages/_message.html.erb @@ -33,14 +33,14 @@ <% end %> - <% if defined?(@prev_thread) || defined?(@next_thread) || defined?(@prev_message_in_thread) || defined?(@next_message_in_thread) %> + <% if defined?(@prev_thread_seq) || defined?(@next_thread_seq) || defined?(@prev_message_in_thread_seq) || defined?(@next_message_in_thread_seq) %>