Module: ActiveRecordRelationExtension
- Defined in:
- lib/baseapi/active_record/relation_extension.rb
Instance Method Summary collapse
-
#filtering!(params) ⇒ Object
column search.
-
#joins_array!(joins) ⇒ Object
joins as array params.
-
#paging!(params) ⇒ Object
pager.
-
#sorting!(params) ⇒ Object
sort.
Instance Method Details
#filtering!(params) ⇒ Object
column search
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/baseapi/active_record/relation_extension.rb', line 5 def filtering!(params) models = self params.each do |key, value| if key.present? and value.present? # this model search if column_names.include?(key) # array change values = value.instance_of?(Array) ? value : [value] values.reject!(&:blank?) # call function function_name = self.model.methods.include?("_where_#{key}".to_sym) ? "_where_#{key}" : '_where' models = self.model.send(function_name, models, key, values) # belongs_to, has_many search else relationSearch = -> (models, currentModel, key, value, joins = []) { associations = currentModel.get_associations() associations.keys.each do |association| if currentModel.column_names.include?(key) # call function function_name = self.model.methods.include?("_#{association}_#{joins.join('_')}".to_sym) ? "_#{association}_#{joins.join('_')}" : "_#{association}" table_name = currentModel.name.underscore hash = {key => value} return self.model.send(function_name, models, table_name, hash) elsif associations[association].include?(key) joins.push key models.joins_array!(joins) currentModel = key.camelize.singularize.constantize value.each do |k, v| # this fnuction collback models = relationSearch.call(models, currentModel, k, v, joins) end end end return models } models = relationSearch.call(models, self.model, key, value) end end end return models end |
#joins_array!(joins) ⇒ Object
joins as array params
73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/baseapi/active_record/relation_extension.rb', line 73 def joins_array!(joins) param = nil joins.reverse.each_with_index do |join, index| join = join.to_sym if index == 0 param = join else param = {join => param} end end joins!(param) end |
#paging!(params) ⇒ Object
pager
49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/baseapi/active_record/relation_extension.rb', line 49 def paging!(params) count = params[:count].present? ? params[:count].to_i : -1; page = params[:page].present? ? params[:page].to_i : 1; if count > 0 if count.present? and count limit!(count) if page offset!((page - 1) * count) end end end end |
#sorting!(params) ⇒ Object
sort
64 65 66 67 68 |
# File 'lib/baseapi/active_record/relation_extension.rb', line 64 def sorting!(params) if params[:order].present? and params[:orderby].present? order!({params[:orderby] => params[:order]}) end end |