module AjaxDatatablesRails::ORM::ActiveRecord

Public Instance Methods

build_conditions() click to toggle source

—————– SEARCH HELPER METHODS ——————–

# File lib/ajax-datatables-rails/orm/active_record.rb, line 32
def build_conditions
  if datatable.searchable?
    build_conditions_for_datatable
  else
    build_conditions_for_selected_columns
  end
end
build_conditions_for_datatable() click to toggle source
# File lib/ajax-datatables-rails/orm/active_record.rb, line 40
def build_conditions_for_datatable
  criteria = search_for.inject([]) do |crit, atom|
    search = Datatable::SimpleSearch.new(value: atom, regex: datatable.search.regexp?)
    crit << searchable_columns.map do |simple_column|
      simple_column.search = search
      simple_column.search_query
    end.reduce(:or)
  end.compact.reduce(:and)
  criteria
end
build_conditions_for_selected_columns() click to toggle source
# File lib/ajax-datatables-rails/orm/active_record.rb, line 51
def build_conditions_for_selected_columns
  search_columns.map(&:search_query).compact.reduce(:and)
end
fetch_records() click to toggle source
# File lib/ajax-datatables-rails/orm/active_record.rb, line 7
def fetch_records
  get_raw_records
end
filter_records(records) click to toggle source
# File lib/ajax-datatables-rails/orm/active_record.rb, line 11
def filter_records(records)
  records.where(build_conditions)
end
paginate_records(records) click to toggle source

rubocop:enable Style/EachWithObject, Style/SafeNavigation

# File lib/ajax-datatables-rails/orm/active_record.rb, line 26
def paginate_records(records)
  records.offset(datatable.offset).limit(datatable.per_page)
end
search_for() click to toggle source
# File lib/ajax-datatables-rails/orm/active_record.rb, line 55
def search_for
  datatable.search.value.split(global_search_delimiter)
end
sort_records(records) click to toggle source

rubocop:disable Style/EachWithObject, Style/SafeNavigation

# File lib/ajax-datatables-rails/orm/active_record.rb, line 16
def sort_records(records)
  sort_by = datatable.orders.inject([]) do |queries, order|
    column = order.column
    queries << order.query(column.sort_query) if column && column.orderable?
    queries
  end
  records.order(Arel.sql(sort_by.join(', ')))
end