lib/administrate/search.rb in administrate-0.13.0 vs lib/administrate/search.rb in administrate-0.14.0
- old
+ new
@@ -79,18 +79,28 @@
end
def query_template
search_attributes.map do |attr|
table_name = query_table_name(attr)
- attr_name = column_to_query(attr)
-
- "LOWER(CAST(#{table_name}.#{attr_name} AS CHAR(256))) LIKE ?"
+ searchable_fields(attr).map do |field|
+ attr_name = column_to_query(field)
+ "LOWER(CAST(#{table_name}.#{attr_name} AS CHAR(256))) LIKE ?"
+ end.join(" OR ")
end.join(" OR ")
end
+ def searchable_fields(attr)
+ return [attr] unless association_search?(attr)
+
+ attribute_types[attr].searchable_fields
+ end
+
def query_values
- ["%#{term.mb_chars.downcase}%"] * search_attributes.count
+ fields_count = search_attributes.sum do |attr|
+ searchable_fields(attr).count
+ end
+ ["%#{term.mb_chars.downcase}%"] * fields_count
end
def search_attributes
attribute_types.keys.select do |attribute|
attribute_types[attribute].searchable?
@@ -115,39 +125,33 @@
@dashboard_class::ATTRIBUTE_TYPES
end
def query_table_name(attr)
if association_search?(attr)
- ActiveRecord::Base.connection.quote_table_name(attr.to_s.pluralize)
+ provided_class_name = attribute_types[attr].options[:class_name]
+ if provided_class_name
+ provided_class_name.constantize.table_name
+ else
+ ActiveRecord::Base.connection.quote_table_name(attr.to_s.pluralize)
+ end
else
ActiveRecord::Base.connection.
quote_table_name(@scoped_resource.table_name)
end
end
def column_to_query(attr)
- if association_search?(attr)
- ActiveRecord::Base.connection.
- quote_column_name(attribute_types[attr].searchable_field)
- else
- ActiveRecord::Base.connection.quote_column_name(attr)
- end
+ ActiveRecord::Base.connection.quote_column_name(attr)
end
def tables_to_join
attribute_types.keys.select do |attribute|
attribute_types[attribute].searchable? && association_search?(attribute)
end
end
def association_search?(attribute)
- return unless attribute_types[attribute].respond_to?(:deferred_class)
-
- [
- Administrate::Field::BelongsTo,
- Administrate::Field::HasMany,
- Administrate::Field::HasOne,
- ].include?(attribute_types[attribute].deferred_class)
+ attribute_types[attribute].associative?
end
def term
query.terms
end