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