# File lib/active_record/associations.rb, line 382
      def has_one(association_id, options = {})
        options.assert_valid_keys(:class_name, :foreign_key, :remote, :conditions, :order, :dependent, :counter_cache)

        association_name, association_class_name, association_class_primary_key_name =
            associate_identification(association_id, options[:class_name], options[:foreign_key], false)

        require_association_class(association_class_name)

        module_eval do
          after_save "association = instance_variable_get(\"@\#{association_name}\")\nunless association.nil?\nassociation[\"\#{association_class_primary_key_name}\"] = id\nassociation.save(true)\nassociation.send(:construct_sql)\nend\n"
        end
      
        association_accessor_methods(association_name, association_class_name, association_class_primary_key_name, options, HasOneAssociation)
        association_constructor_method(:build, association_name, association_class_name, association_class_primary_key_name, options, HasOneAssociation)
        association_constructor_method(:create, association_name, association_class_name, association_class_primary_key_name, options, HasOneAssociation)
        
        case options[:dependent]
          when :destroy, true
            module_eval "before_destroy '#{association_name}.destroy unless #{association_name}.nil?'"
          when :nullify
            module_eval "before_destroy '#{association_name}.update_attribute(\"#{association_class_primary_key_name}\", nil)'"
          when nil, false
            # pass
          else
            raise ArgumentError, "The :dependent option expects either :destroy or :nullify."
        end

        # deprecated api
        deprecated_has_association_method(association_name)
        deprecated_association_comparison_method(association_name, association_class_name)
      end