11class MessagesController < ApplicationController
22 PER_PAGE = 50
33
4- # GET /messages
5- def index
6- if ( list_name = params [ :list_name ] )
4+ # GET /ruby-dev or /q=searchterm
5+ def index ( list_name : nil , q : nil , page : nil )
6+ if list_name
77 @list = List . find_by_name list_name
88
99 messages = Message . with_recursive ( parent_and_children : [ Message . where ( list_id : @list , parent_id : nil ) . order ( :id ) . limit ( 100 ) , Message . joins ( 'inner join parent_and_children on messages.parent_id = parent_and_children.id' ) ] )
1010 . joins ( 'inner join parent_and_children on parent_and_children.id = messages.id' )
1111 @messages = compose_tree ( messages )
12- elsif ( query = params [ :q ] )
13- search query
12+ elsif q
13+ search q , page
1414
1515 render :search
1616 else
@@ -20,10 +20,10 @@ def index
2020 end
2121 end
2222
23- # GET /messages/ ruby-dev/1
24- def show
25- @list = List . find_by_name ( params [ : list_name] )
26- @message = Message . find_by ( list_id : @list , list_seq : params [ : list_seq] )
23+ # GET /ruby-dev/1
24+ def show ( list_name : , list_seq : )
25+ @list = List . find_by_name ( list_name )
26+ @message = Message . find_by! ( list_id : @list , list_seq : list_seq )
2727 end
2828
2929 private
@@ -38,8 +38,7 @@ def get_list_ids(params)
3838 list_ids
3939 end
4040
41- def search ( query )
42- page = params [ :page ] . to_i
41+ def search ( query , page )
4342 list_ids = get_list_ids ( params )
4443 if list_ids . empty?
4544 raise "Need to select at least one list"
@@ -48,7 +47,7 @@ def search(query)
4847 # %> and <-> are defined by pg_trgm.
4948 # https://www.postgresql.org/docs/17/pgtrgm.html
5049 message_where = Message . where ( 'body %> ? AND list_id IN (?)' , query , list_ids ) . order ( Arel . sql ( 'body <-> ?' , query ) )
51- @messages = message_where . offset ( page * PER_PAGE ) . limit ( PER_PAGE )
50+ @messages = message_where . offset ( page . to_i * PER_PAGE ) . limit ( PER_PAGE )
5251 end
5352
5453 def compose_tree ( messages )
0 commit comments