# File lib/simple_form/form_builder.rb, line 165
    def association(association, options={}, &block)
      options = options.dup

      return simple_fields_for(*[association,
        options.delete(:collection), options].compact, &block) if block_given?

      raise ArgumentError, "Association cannot be used in forms not associated with an object" unless @object

      reflection = find_association_reflection(association)
      raise "Association #{association.inspect} not found" unless reflection

      options[:as] ||= :select
      options[:collection] ||= reflection.klass.all(reflection.options.slice(:conditions, :order))

      attribute = case reflection.macro
        when :belongs_to
          (reflection.respond_to?(:options) && reflection.options[:foreign_key]) || "#{reflection.name}_id""#{reflection.name}_id"
        when :has_one
          raise ":has_one associations are not supported by f.association"
        else
          if options[:as] == :select
            html_options = options[:input_html] ||= {}
            html_options[:size]   ||= 5
            html_options[:multiple] = true unless html_options.key?(:multiple)
          end

          # Force the association to be preloaded for performance.
          if options[:preload] != false && object.respond_to?(association)
            target = object.send(association)
            target.to_a if target.respond_to?(:to_a)
          end

          "#{reflection.name.to_s.singularize}_ids""#{reflection.name.to_s.singularize}_ids"
      end

      input(attribute, options.merge(:reflection => reflection))
    end