Changeset 32
- Timestamp:
- 06/25/2007 02:35:19 PM (1 year ago)
- Files:
-
- trunk/auto-admin/lib/auto_admin_configuration.rb (modified) (2 diffs)
- trunk/auto-admin/lib/auto_admin_filter_sets.rb (modified) (3 diffs)
- trunk/auto-admin/lib/auto_admin_simple_theme.rb (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/auto-admin/lib/auto_admin_configuration.rb
r29 r32 124 124 (@custom_filter_options ||= {})[column_name.to_sym] = AutoAdmin::CustomFilterSet.new( self, reflect_on_association( column_name ) || find_column( column_name ), custom_options, &block ) 125 125 end 126 def dynamic_filter_options_for column_name, &block 127 filter_options_for( column_name, block ) 128 end 126 129 def filters 127 130 columns_for_filter.map { |col| filter_instance( col ) } … … 134 137 when :belongs_to: AutoAdmin::AssociationFilterSet 135 138 when :has_one: AutoAdmin::AssociationFilterSet 139 when :has_many: AutoAdmin::MultiAssociationFilterSet 140 when :has_and_belongs_to_many: AutoAdmin::MultiAssociationFilterSet 136 141 when :datetime: AutoAdmin::DateFilterSet 137 142 else trunk/auto-admin/lib/auto_admin_filter_sets.rb
r20 r32 47 47 def other_options 48 48 a = [] 49 @options.each do |k,v| 49 options = @options 50 options = options.call if options.respond_to?( :call ) 51 options.each do |k,v| 50 52 o = build_option( k, v ) 51 53 o[:sql] = @block.call( k ) unless @block.nil? … … 91 93 end 92 94 def sql_column 93 (assoc.options && assoc.options[:foreign_key]) || (assoc.name.to_s + '_id')95 assoc.association_foreign_key 94 96 end 95 97 def objects … … 104 106 def sql_from_string option_name 105 107 sql_from_value option_name.to_i 108 end 109 end 110 class MultiAssociationFilterSet < AssociationFilterSet 111 def sql_from_value option_name 112 ["EXISTS(SELECT * FROM #{assoc.options[:join_table]} WHERE #{assoc.primary_key_name} = #{assoc.active_record.primary_key} AND #{assoc.association_foreign_key} = ?)", option_name] 106 113 end 107 114 end trunk/auto-admin/lib/auto_admin_simple_theme.rb
r29 r32 178 178 def get_column_from_field(field) 179 179 assoc = model.reflect_on_association( field.to_sym ) 180 assoc ? assoc.primary_key_name: field180 assoc ? ([:has_many, :has_and_belongs_to_many].include?(assoc.macro) ? "#{field.to_s.singularize}_ids" : assoc.primary_key_name) : field 181 181 end 182 182 … … 286 286 end 287 287 super( field, dropdown_options, options, html_options ) 288 end 289 def multiselect(field, options = {}, html_options = {}) 290 common_option_translations! options 291 dropdown_options = find_choices(field, options) 292 column = get_column_from_field(field) 293 html_defaults = { :size => 8, :multiple => true, 294 :name => "#{@object_name}[#{column}][]", 295 :id => "#{@object_name}_#{column}" } 296 297 helpers.content_tag('select', helpers.options_for_select( dropdown_options, @object && @object.send(column) ), html_defaults.merge( html_options ) ) 288 298 end 289 299 def radio_group(field, options = {})
