module MakeModelSearchable::ClassMethods
Public Instance Methods
search(search_term)
click to toggle source
# File lib/make_model_searchable.rb, line 71 def search(search_term) valid_fields = self.instance_variable_get(:@selected_fields) joined_fields = self.instance_variable_get(:@joined_fields) if valid_fields.present? if search_term search_term = "%#{search_term.downcase}%" own_table = self.arel_table arel_node = Arel::Nodes::Node.new valid_fields.each_with_index do |val, index| if index == 0 arel_node = own_table[val].lower.matches(search_term) else arel_node = arel_node.or(own_table[val].lower.matches(search_term)) end end join_table_names = [] if joined_fields.present? joined_fields.each do |field| associated_relation = field.associated_klass.arel_table join_table_names << field.association_name if arel_node.present? arel_node = arel_node.or(associated_relation[field.name].lower.matches(search_term)) else arel_node = associated_relation[field.name].lower.matches(search_term) end end end joins(join_table_names).where(arel_node) else all end else raise Exception, "Please pass valid attributes for class: #{self.name}" end end