Как установить длину строки DataMapper неограниченной для PostgreSQL - PullRequest
1 голос
/ 20 июня 2011

Конечно, можно использовать property :foo, Text, lazy: false повсеместно, чтобы заменить property :foo, String, но это, конечно, побеждает несколько целей за один раз.Или я мог бы использовать ручные миграции, что я и делал - сейчас я осматриваюсь, чтобы посмотреть, можно ли от них наконец отказаться, поскольку речь идет о VARCHAR v. TEXT.

Другими словами, я бынапример, автоматическое создание полей TEXT для PostgreSQL для моделей со свойствами String, а не произвольно, бессмысленно, ограниченный VARCHAR поверх TEXT.

Ответы [ 2 ]

0 голосов
/ 16 марта 2012

Вот паршивое, но работающее решение, которое я придумал, - если вам лучше, пожалуйста, добавьте его, и я его приму.

В config/initializers/postgresql_strings.rb

module DataMapper
  module Migrations
    module PostgresAdapter
      def self.included(base)
        base.extend ClassMethods
      end

      module ClassMethods

        def type_map
          precision = Property::Numeric.precision
          scale     = Property::Decimal.scale

          super.merge(
            Property::Binary => { :primitive => 'BYTEA' },
            BigDecimal => { :primitive => 'NUMERIC', :precision => precision, :scale => scale },
            Float => { :primitive => 'DOUBLE PRECISION' },
            String => { :primitive => 'TEXT' } # All that for this
          ).freeze
        end
      end

    end
  end
end

# If you're including dm-validations, it will surprisingly attempt
# to validate strings to <= 50 characters, this prevents that.
DataMapper::Property::String.auto_validation(false)
0 голосов
/ 20 июня 2011

Адаптер Postgres , похоже, способен справиться с этим:

# size is still required, as length in postgres behaves slightly differently
def size
  case self.type
  #strings in postgres can be unlimited length
  when :string then return (@options.has_key?(:length) || @options.has_key?(:size) ? @size : nil)
  else nil
  end
end

Неопробованное предложение, но с учетом источника инициализации и функции длины сразупод ним попробуйте передать ноль как длину, или вообще не указывать длину.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...