From 9844787b583704d24bd838e983b47d779d569723 Mon Sep 17 00:00:00 2001 From: Akira Matsuda Date: Thu, 9 Oct 2025 19:10:13 +0900 Subject: [PATCH 1/2] messages/index.html.erb => messages/search.html.erb --- app/controllers/messages_controller.rb | 4 ++++ app/views/messages/{index.html.erb => search.html.erb} | 0 2 files changed, 4 insertions(+) rename app/views/messages/{index.html.erb => search.html.erb} (100%) diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb index ae11bd9..fb85a5c 100644 --- a/app/controllers/messages_controller.rb +++ b/app/controllers/messages_controller.rb @@ -6,6 +6,8 @@ def index query = params[:q] unless query @messages = [] + + render :search return end @@ -24,6 +26,8 @@ def index Message.where('body LIKE ? AND list_id IN (?)', "%#{query}%", list_ids) end @messages = message_where.offset(page * PER_PAGE).limit(PER_PAGE) + + render :search end # GET /messages/1 diff --git a/app/views/messages/index.html.erb b/app/views/messages/search.html.erb similarity index 100% rename from app/views/messages/index.html.erb rename to app/views/messages/search.html.erb From a6155fb7c5599ce6d47ac373a1faea579116b87a Mon Sep 17 00:00:00 2001 From: Akira Matsuda Date: Thu, 9 Oct 2025 19:30:54 +0900 Subject: [PATCH 2/2] Extract search logic to a private method --- app/controllers/messages_controller.rb | 43 +++++++++++++------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb index fb85a5c..b0a3142 100644 --- a/app/controllers/messages_controller.rb +++ b/app/controllers/messages_controller.rb @@ -3,29 +3,11 @@ class MessagesController < ApplicationController # GET /messages def index - query = params[:q] - unless query - @messages = [] - - render :search - return - end - - page = params[:page].to_i - list_ids = get_list_ids(params) - if list_ids.empty? - raise "Need to select at least one list" - end - - # %> and <-> are defined by pg_trgm. - # https://www.postgresql.org/docs/17/pgtrgm.html - message_where = if Rails.env.production? - Message.where('body %> ? AND list_id IN (?)', query, list_ids) - .order(Arel.sql('body <-> ?', query)) + if (query = params[:q]) + search query else - Message.where('body LIKE ? AND list_id IN (?)', "%#{query}%", list_ids) + @messages = [] end - @messages = message_where.offset(page * PER_PAGE).limit(PER_PAGE) render :search end @@ -41,6 +23,7 @@ def show end private + def get_list_ids(params) list_ids = [] ['ruby-talk', 'ruby-core', 'ruby-list', 'ruby-dev'].each do |name| @@ -50,4 +33,22 @@ def get_list_ids(params) end list_ids end + + def search(query) + page = params[:page].to_i + list_ids = get_list_ids(params) + if list_ids.empty? + raise "Need to select at least one list" + end + + # %> and <-> are defined by pg_trgm. + # https://www.postgresql.org/docs/17/pgtrgm.html + message_where = if Rails.env.production? + Message.where('body %> ? AND list_id IN (?)', query, list_ids) + .order(Arel.sql('body <-> ?', query)) + else + Message.where('body LIKE ? AND list_id IN (?)', "%#{query}%", list_ids) + end + @messages = message_where.offset(page * PER_PAGE).limit(PER_PAGE) + end end