71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
# 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
|