Module: ActiveScaffold::Bridges::RecordSelect::Helpers::FormColumnHelpers

Defined in:
lib/active_scaffold/bridges/record_select/helpers.rb

Instance Method Summary collapse

Instance Method Details

#active_scaffold_input_record_select(column, options) ⇒ Object

requires RecordSelect plugin to be installed and configured.



12
13
14
15
16
17
18
19
20
21
22
# File 'lib/active_scaffold/bridges/record_select/helpers.rb', line 12

def active_scaffold_input_record_select(column, options)
  if column.singular_association?
    multiple = false
    multiple = column.options[:html_options][:multiple] if column.options[:html_options] &&  column.options[:html_options][:multiple]
    active_scaffold_record_select(column, options, @record.send(column.name), multiple)
  elsif column.plural_association?
    active_scaffold_record_select(column, options, @record.send(column.name), true)
  else
    active_scaffold_record_select_autocomplete(column, options)
  end
end

#active_scaffold_record_select(column, options, value, multiple) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/active_scaffold/bridges/record_select/helpers.rb', line 24

def active_scaffold_record_select(column, options, value, multiple)
  unless column.association
    raise ArgumentError, "record_select can only work against associations (and #{column.name} is not).  A common mistake is to specify the foreign key field (like :user_id), instead of the association (:user)."
  end
  remote_controller = active_scaffold_controller_for(column.association.associated_class).controller_path

  # if the opposite association is a :belongs_to (in that case association in this class must be has_one or has_many)
  # then only show records that have not been associated yet
  if [:has_one, :has_many].include?(column.association.macro)
    params.merge!({column.association.primary_key_name => ''})
  end
 
  record_select_options = active_scaffold_input_text_options(options).merge(
    :controller => remote_controller
  )
  record_select_options.merge!(column.options)
 
  html = if multiple
    record_multi_select_field(options[:name], value || [], record_select_options)
  else
    record_select_field(options[:name], value || column.association.associated_class.new, record_select_options)
  end
  html = self.class.field_error_proc.call(html, self) if @record.errors[column.name].any?
  html
end

#active_scaffold_record_select_autocomplete(column, options) ⇒ Object



50
51
52
53
54
55
56
57
# File 'lib/active_scaffold/bridges/record_select/helpers.rb', line 50

def active_scaffold_record_select_autocomplete(column, options)
  record_select_options = active_scaffold_input_text_options(options).merge(
    :controller => active_scaffold_controller_for(@record.class).controller_path
  )
  html = record_select_autocomplete(options[:name], @record, record_select_options)
  html = self.class.field_error_proc.call(html, self) if @record.errors[column.name].any?
  html
end