@@ -52,12 +52,16 @@ def fetch_records
52
52
records = get_raw_records
53
53
records = sort_records ( records )
54
54
records = filter_records ( records )
55
- records = paginate_records ( records )
55
+ records = paginate_records ( records ) unless params [ :length ] == '-1'
56
56
records
57
57
end
58
58
59
59
def sort_records ( records )
60
- records . order ( "#{ sort_column } #{ sort_direction } " )
60
+ sort_by = [ ]
61
+ params [ :order ] . each_value do |item |
62
+ sort_by << "#{ sort_column ( item ) } #{ sort_direction ( item ) } "
63
+ end
64
+ records . order ( sort_by . join ( ", " ) )
61
65
end
62
66
63
67
def paginate_records ( records )
@@ -74,7 +78,7 @@ def filter_records(records)
74
78
end
75
79
76
80
def simple_search ( records )
77
- return records unless ( params [ :search ] && params [ :search ] [ :value ] )
81
+ return records unless ( params [ :search ] . present? && params [ :search ] [ :value ] . present? )
78
82
conditions = build_conditions_for ( params [ :search ] [ :value ] )
79
83
records = records . where ( conditions ) if conditions
80
84
records
@@ -87,7 +91,11 @@ def composite_search(records)
87
91
end
88
92
89
93
def build_conditions_for ( query )
90
- searchable_columns . map { |col | search_condition ( col , query ) } . reduce ( :or )
94
+ search_for = query . split ( ' ' )
95
+ criteria = search_for . inject ( [ ] ) do |criteria , atom |
96
+ criteria << searchable_columns . map { |col | search_condition ( col , atom ) } . reduce ( :or )
97
+ end . reduce ( :and )
98
+ criteria
91
99
end
92
100
93
101
def search_condition ( column , value )
@@ -117,13 +125,13 @@ def per_page
117
125
params . fetch ( :length , 10 ) . to_i
118
126
end
119
127
120
- def sort_column
121
- sortable_columns [ params [ :order ] [ '0' ] [ :column ] . to_i ] if params [ :order ]
128
+ def sort_column ( item )
129
+ sortable_columns [ item [ 'column' ] . to_i ]
122
130
end
123
131
124
- def sort_direction
132
+ def sort_direction ( item )
125
133
options = %w( desc asc )
126
- options . include? ( params [ :order ] [ '0' ] [ :dir ] ) ? params [ :order ] [ '0' ] [ :dir ] . upcase : 'ASC' if params [ :order ]
134
+ options . include? ( item [ 'dir' ] ) ? item [ 'dir' ] . upcase : 'ASC'
127
135
end
128
136
end
129
137
end
0 commit comments