def select(label, name, args = {})
id = args[:id] ? args[:id] : id_for(name)
multiple, size = args.values_at(:multiple, :size)
if !args[:values] and @form_values.respond_to?(name)
values = @form_values.send(name)
else
values = args[:values]
args.delete(:values)
end
args[:multiple] = 'multiple' if multiple
args[:size] = (size || values.count || 1).to_i
args[:name] = multiple ? "#{name}[]" : name
args = args.merge(:id => id)
has_selected, selected = args.key?(:selected), args[:selected]
selected = [selected] if !selected.is_a?(Array)
args.delete(:selected)
@g.p do
label_for(id, label, name)
@g.select args do
values.each do |value, o_name|
o_name ||= value
o_args = {:value => value}
if has_selected and selected.include?(value)
o_args[:selected] = 'selected'
end
@g.option(o_args){ o_name }
end
end
end
end