# File lib/dm-core/model/relationship.rb, line 157
      def belongs_to(name, *args)
        name       = name.to_sym
        model_name = self.name
        model      = extract_model(args)
        options    = extract_options(args)

        if options.key?(:through)
          warn "#{model_name}#belongs_to with :through is deprecated, use 'has 1, :#{name}, #{options.inspect}' in #{model_name} instead (#{caller[0]})"
          return has(1, name, model, options)
        end

        assert_valid_options(options)

        if options.key?(:model) && model
          raise ArgumentError, 'should not specify options[:model] if passing the model in the third argument'
        end

        model ||= options.delete(:model)

        repository_name = repository.name

        # TODO: change to source_repository_name and target_respository_name
        options[:child_repository_name]  = repository_name
        options[:parent_repository_name] = options.delete(:repository)

        relationship = relationships(repository_name)[name] = Associations::ManyToOne::Relationship.new(name, self, model, options)

        descendants.each do |descendant|
          descendant.relationships(repository_name)[name] ||= relationship
        end

        create_relationship_reader(relationship)
        create_relationship_writer(relationship)

        relationship
      end