module ActiveScaffold::Helpers::AssociationHelpers
Public Instance Methods
association_klass_scoped(association, klass, record)
click to toggle source
# File lib/active_scaffold/helpers/association_helpers.rb, line 61 def association_klass_scoped(association, klass, record) if nested? && nested.through_association? && nested.child_association.try(:through_reflection) == association if nested.association.through_reflection.collection? nested_parent_record.send(nested.association.through_reflection.name) else klass.where(association.association_primary_key => nested_parent_record.send(nested.association.through_reflection.name).try(:id)) end else klass end end
association_options_count(association, conditions = nil)
click to toggle source
# File lib/active_scaffold/helpers/association_helpers.rb, line 84 def association_options_count(association, conditions = nil) association.klass.where(conditions).where(association.options[:conditions]).count end
association_options_find(association, conditions = nil, klass = nil, record = nil) { |relation| ... }
click to toggle source
Provides a way to honor the :conditions on an association while searching the association's klass
# File lib/active_scaffold/helpers/association_helpers.rb, line 16 def association_options_find(association, conditions = nil, klass = nil, record = nil) ActiveSupport::Deprecation.warn 'Relying on @record is deprecated, call with record.', caller if record.nil? # TODO: Remove when relying on @record is removed record ||= @record # TODO: Remove when relying on @record is removed if klass.nil? && association.options[:polymorphic] class_name = record.send(association.foreign_type) if class_name.present? klass = class_name.constantize else return [] end cache = !block_given? else cache = !block_given? && klass.nil? klass ||= association.klass end if conditions.nil? if method(:options_for_association_conditions).arity.abs == 2 conditions = options_for_association_conditions(association, record) else ActiveSupport::Deprecation.warn 'Relying on @record is deprecated, include record in your options_for_association_conditions overrided method.', caller if record.nil? # TODO: Remove when relying on @record is removed conditions = options_for_association_conditions(association) end end cache_association_options(association, conditions, klass, cache) do klass = association_klass_scoped(association, klass, record) relation = klass.where(conditions).where(association.options[:conditions]) relation = relation.includes(association.options[:include]) if association.options[:include] column = column_for_association(association, record) if column && column.try(:sort) && column.sort[:sql] if column.includes include_assoc = column.includes.find { |assoc| assoc.is_a?(Hash) && assoc.include?(association.name) } relation = relation.includes(include_assoc[association.name]) if include_assoc end relation = relation.order(column.sort[:sql]) end relation = yield(relation) if block_given? relation.to_a end end
cache_association_options(association, conditions, klass, cache = true) { || ... }
click to toggle source
Cache the options for select
# File lib/active_scaffold/helpers/association_helpers.rb, line 5 def cache_association_options(association, conditions, klass, cache = true) if active_scaffold_config.cache_association_options && cache @_associations_cache ||= Hash.new { |h, k| h[k] = {} } key = [association.name, association.active_record.name, klass.name].join('/') @_associations_cache[key][conditions] ||= yield else yield end end
column_for_association(association, record)
click to toggle source
# File lib/active_scaffold/helpers/association_helpers.rb, line 57 def column_for_association(association, record) active_scaffold_config_for(record.class).columns[association.name] rescue nil end
options_for_association_conditions(association, record = nil)
click to toggle source
A useful override for customizing the records present in an association dropdown. Should work in both the subform and form_ui=>:select modes. Check association.name to specialize the conditions per-column.
# File lib/active_scaffold/helpers/association_helpers.rb, line 101 def options_for_association_conditions(association, record = nil) return nil if association.options[:through] case association.macro when :has_one, :has_many # Find only orphaned objects {association.foreign_key => nil} when :belongs_to, :has_and_belongs_to_many # Find all nil end end
options_for_association_count(association, record)
click to toggle source
# File lib/active_scaffold/helpers/association_helpers.rb, line 88 def options_for_association_count(association, record) if method(:options_for_association_conditions).arity.abs == 2 conditions = options_for_association_conditions(association, record) else ActiveSupport::Deprecation.warn 'Relying on @record is deprecated, include record in your options_for_association_conditions overrided method.', caller if record.nil? # TODO: Remove when relying on @record is removed conditions = options_for_association_conditions(association) end association_options_count(association, conditions) end
record_select_params_for_add_existing(association, edit_associated_url_options, record)
click to toggle source
# File lib/active_scaffold/helpers/association_helpers.rb, line 113 def record_select_params_for_add_existing(association, edit_associated_url_options, record) {:onselect => "ActiveScaffold.record_select_onselect(#{url_for(edit_associated_url_options).to_json}, #{active_scaffold_id.to_json}, id);"} end
sorted_association_options_find(association, conditions = nil, record = nil)
click to toggle source
Sorts the options for select
# File lib/active_scaffold/helpers/association_helpers.rb, line 74 def sorted_association_options_find(association, conditions = nil, record = nil) options = association_options_find(association, conditions, nil, record) column = column_for_association(association, record) unless column && column.try(:sort) && column.sort[:sql] method = column.options[:label_method] if column options = options.sort_by(&(method || :to_label).to_sym) end options end