Module: SearchSortPaginate::Controller

Defined in:
lib/search_sort_paginate/controller.rb

Instance Method Summary collapse

Instance Method Details

#paginate(relation, params, opts = {}) ⇒ Object



21
22
23
24
25
# File 'lib/search_sort_paginate/controller.rb', line 21

def paginate( relation, params, opts = {})
  page_number = params[:page] || 1
  page_size = params[:page_size] || 8
  relation.page( page_number ).per( page_size )
end

#search(params, relation, opts = {}) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
# File 'lib/search_sort_paginate/controller.rb', line 9

def search( params, relation, opts = {} )
  search = params[:search]
  if search.present?
    searchable_fields = relation.klass.searchable_fields || []
    if searchable_fields.present?
      search_sql = searchable_fields.map{|s_f| ActiveRecord::Base.send(:sanitize_sql_array,["#{s_f} LIKE ?", "%#{search}%"]) }.join(' || ')
      relation = relation.where(search_sql)
    end
  end
  relation
end

#search_sort_paginate(params, relation, artificial_attributes = {}, opts = {}) ⇒ Object



3
4
5
6
7
# File 'lib/search_sort_paginate/controller.rb', line 3

def search_sort_paginate( params, relation, artificial_attributes = {}, opts = {} )
  relation = search( params, relation, opts )
  relation = sort( params, relation, artificial_attributes, opts )
  relation = paginate( relation, params, opts )
end

#sort(params, relation, artificial_attributes, opts = {}) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/search_sort_paginate/controller.rb', line 27

def sort( params, relation, artificial_attributes, opts = {} )
  
  column = params[:sort]
  if column && artificial_attributes[column.to_sym].present?
    column = artificial_attributes[column.to_sym]
  end

  direction = params[:direction]
  if column && direction
    relation.order(column + ' ' + direction)
  else
    relation
  end
end