Sha256: 598f952e3117aa5dce5a53923d9b6a5385775753b28a8c60b3caa5ed34ead9da

Contents?: true

Size: 1.94 KB

Versions: 15

Compression:

Stored size: 1.94 KB

Contents

class AdminAssistant
  class HasManyColumn < Column
    def initialize(has_many_assoc, opts)
      @has_many_assoc = has_many_assoc
      @match_text_fields_in_search = opts[:match_text_fields_in_search]
    end
    
    def add_to_query_condition(ar_query_condition, search)
      if @match_text_fields_in_search
        if (value = search.send(name)) and !value.blank?
          searchable_columns = Model.new(associated_class).searchable_columns
          model_class = @has_many_assoc.active_record
          sanitized_match_value = ActiveRecord::Base.sanitize("%#{value}%")
          searchable_column_comparisons = searchable_columns.map { |column|
            "LOWER(#{associated_class.table_name}.#{column.name}) like LOWER(#{sanitized_match_value})"
          }
          foreign_key = if @has_many_assoc.respond_to?(:foreign_key)
            @has_many_assoc.foreign_key
          else
            @has_many_assoc.primary_key_name
          end
          condition_sql = <<-CONDITION_SQL
          #{model_class.table_name}.#{model_class.primary_key} in (select #{foreign_key} from #{associated_class.table_name} where #{searchable_column_comparisons.join(' or ')})
          CONDITION_SQL
          ar_query_condition.sqls << condition_sql
        end
      end
    end

    def associated_class
      @has_many_assoc.klass
    end
    
    def attributes_for_search_object(search_params, compare_to_range)
      {name.to_sym => search_params[name]}
    end
    
    def contains?(column_name)
      column_name.to_s == name
    end
    
    def model_class
      @has_many_assoc.active_record
    end
    
    def name
      @has_many_assoc.name.to_s
    end
    
    class FormView < AdminAssistant::VirtualColumn::FormView
    end
    
    class SearchView < AdminAssistant::Column::View
      include AdminAssistant::Column::SearchViewMethods
      
      def html(form)
        "<p><label>#{label}</label> <br/>#{form.text_field(name)}</p>"
      end
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
admin_assistant-2.4.0 lib/admin_assistant/has_many_column.rb
admin_assistant-2.3.2 lib/admin_assistant/has_many_column.rb
admin_assistant-2.3.1 lib/admin_assistant/has_many_column.rb
admin_assistant-2.3.0 lib/admin_assistant/has_many_column.rb
admin_assistant-2.2.8 lib/admin_assistant/has_many_column.rb
admin_assistant-2.2.7 lib/admin_assistant/has_many_column.rb
admin_assistant-2.2.6 lib/admin_assistant/has_many_column.rb
admin_assistant-2.2.5 lib/admin_assistant/has_many_column.rb
admin_assistant-2.2.4 lib/admin_assistant/has_many_column.rb
admin_assistant-2.2.3 lib/admin_assistant/has_many_column.rb
admin_assistant-2.2.2 lib/admin_assistant/has_many_column.rb
admin_assistant-2.2.1 lib/admin_assistant/has_many_column.rb
admin_assistant-2.2.0 lib/admin_assistant/has_many_column.rb
admin_assistant-2.1.1 lib/admin_assistant/has_many_column.rb
admin_assistant-2.1.0 lib/admin_assistant/has_many_column.rb