From 6d33239f36d69b9866fee631ce73b3202709ad1f Mon Sep 17 00:00:00 2001 From: Akira Matsuda Date: Sat, 3 Jan 2026 23:04:37 +0900 Subject: [PATCH 1/2] Reduce Message model instantiations --- app/controllers/messages_controller.rb | 4 ++-- app/views/messages/_message.html.erb | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb index 92b85d6..d896b88 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( diff --git a/app/views/messages/_message.html.erb b/app/views/messages/_message.html.erb index 67dc989..ecc6d39 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) || defined?(@next_message_in_thread) %>

Thread

- <% if @prev_thread %> - <%= link_to [message.list, @prev_thread], class: "inline-flex items-center gap-1 px-3 py-2 text-sm font-medium rounded bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700 transition-colors", data: {turbo_frame: 'message_content', turbo_action: 'advance', nav: 'prev-thread'} do %> + <% if @prev_thread_seq %> + <%= link_to list_message_path(message.list, @prev_thread_seq), class: "inline-flex items-center gap-1 px-3 py-2 text-sm font-medium rounded bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700 transition-colors", data: {turbo_frame: 'message_content', turbo_action: 'advance', nav: 'prev-thread'} do %> @@ -54,8 +54,8 @@ Prev <% end %> - <% if @next_thread %> - <%= link_to [message.list, @next_thread], class: "inline-flex items-center gap-1 px-3 py-2 text-sm font-medium rounded bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700 transition-colors", data: {turbo_frame: 'message_content', turbo_action: 'advance', nav: 'next-thread'} do %> + <% if @next_thread_seq %> + <%= link_to list_message_path(message.list, @next_thread_seq), class: "inline-flex items-center gap-1 px-3 py-2 text-sm font-medium rounded bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700 transition-colors", data: {turbo_frame: 'message_content', turbo_action: 'advance', nav: 'next-thread'} do %> Next From be11833b6c68d62b69bcca7b4248d41b594e6b03 Mon Sep 17 00:00:00 2001 From: Akira Matsuda Date: Sun, 4 Jan 2026 10:02:43 +0900 Subject: [PATCH 2/2] Reduce Message instances when composing threads --- app/controllers/messages_controller.rb | 8 ++++---- app/views/messages/_message.html.erb | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb index d896b88..70578e2 100644 --- a/app/controllers/messages_controller.rb +++ b/app/controllers/messages_controller.rb @@ -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 ecc6d39..29901ab 100644 --- a/app/views/messages/_message.html.erb +++ b/app/views/messages/_message.html.erb @@ -33,7 +33,7 @@
<% end %> - <% if defined?(@prev_thread_seq) || defined?(@next_thread_seq) || 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) %>
@@ -74,8 +74,8 @@

In This Thread

- <% if @prev_message_in_thread %> - <%= link_to [message.list, @prev_message_in_thread], class: "inline-flex items-center gap-1 px-3 py-2 text-sm font-medium rounded bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700 transition-colors", data: {turbo_frame: 'message_content', turbo_action: 'advance', nav: 'prev-message'} do %> + <% if @prev_message_in_thread_seq %> + <%= link_to list_message_path(message.list, @prev_message_in_thread_seq), class: "inline-flex items-center gap-1 px-3 py-2 text-sm font-medium rounded bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700 transition-colors", data: {turbo_frame: 'message_content', turbo_action: 'advance', nav: 'prev-message'} do %> @@ -89,8 +89,8 @@ Prev <% end %> - <% if @next_message_in_thread %> - <%= link_to [message.list, @next_message_in_thread], class: "inline-flex items-center gap-1 px-3 py-2 text-sm font-medium rounded bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700 transition-colors", data: {turbo_frame: 'message_content', turbo_action: 'advance', nav: 'next-message'} do %> + <% if @next_message_in_thread_seq %> + <%= link_to list_message_path(message.list, @next_message_in_thread_seq), class: "inline-flex items-center gap-1 px-3 py-2 text-sm font-medium rounded bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:bg-gray-200 dark:hover:bg-gray-700 transition-colors", data: {turbo_frame: 'message_content', turbo_action: 'advance', nav: 'next-message'} do %> Next