Module: ActiveScaffold::Helpers::AssociationHelpers

Included in:
ViewHelpers
Defined in:
lib/active_scaffold/helpers/association_helpers.rb

Instance Method Summary collapse

Instance Method Details

#association_options_count(association, conditions = nil) ⇒ Object



14
15
16
17
18
19
# File 'lib/active_scaffold/helpers/association_helpers.rb', line 14

def association_options_count(association, conditions = nil)
  relation = association.associated_class.dataset
  relation = relation.where(conditions) if conditions
  relation = relation.where(association[:conditions]) if association[:conditions]
  relation.count
end

#association_options_find(association, conditions = nil) ⇒ Object

Provides a way to honor the :conditions on an association while searching the association’s klass



5
6
7
8
9
10
11
12
# File 'lib/active_scaffold/helpers/association_helpers.rb', line 5

def association_options_find(association, conditions = nil)
  relation = association.associated_class.dataset
  relation = relation.where(conditions) if conditions
  relation = relation.where(association[:conditions]) if association[:conditions]
  relation = relation.eager(association[:eager]) if association[:eager]
  relation = relation.eager_graph(association[:eager_graph]) if association[:eager_graph]
  relation.all
end

#options_for_association(association, include_all = false) ⇒ Object

returns options for the given association as a collection of [id, label] pairs intended for the options_for_select helper.



22
23
24
25
26
# File 'lib/active_scaffold/helpers/association_helpers.rb', line 22

def options_for_association(association, include_all = false)
  available_records = association_options_find(association, include_all ? nil : options_for_association_conditions(association))
  available_records ||= []
  available_records.sort{|a,b| a.to_label <=> b.to_label}.collect { |model| [ model.to_label, model.id ] }
end

#options_for_association_conditions(association) ⇒ Object

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.



35
36
37
38
39
40
41
42
43
44
45
# File 'lib/active_scaffold/helpers/association_helpers.rb', line 35

def options_for_association_conditions(association)
  return nil if association[:join_table]
  case association[:type]
    when :one_to_one, :one_to_many
      # Find only orphaned objects
      {association[:key] => nil}
    when :many_to_one, :many_to_many
      # Find all
      nil
  end
end

#options_for_association_count(association) ⇒ Object



28
29
30
# File 'lib/active_scaffold/helpers/association_helpers.rb', line 28

def options_for_association_count(association)
  association_options_count(association, options_for_association_conditions(association))
end