Spec-Zone.ru › Ruby on Rails 6.1

модуль ActiveRecord::ConnectionAdapters::Quoting

Общедоступные методы экземпляра

quote(value) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 11
      def quote(value)
        if value.is_a?(Base)
          ActiveSupport::Deprecation.warn(<<~MSG)
            Passing an Active Record object to `quote` directly is deprecated
            and will be no longer quoted as id value in Rails 6.2.
          MSG
          value = value.id_for_database
        end

        _quote(value)
      end

Приводит значение столбца к цитируемому виду, чтобы предотвратить атаки SQL-инъекций.

quote_column_name(column_name) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 66
def quote_column_name(column_name)
  column_name.to_s
end

Приводит имя столбца к цитируемому виду. По умолчанию цитирование не используется.

quote_string(s) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 61
def quote_string(s)
  s.gsub('\\', '\&\&').gsub("'", "''") # ' (for ruby-mode)
end

Приводит строку к цитируемому виду, экранируя все символы ' (одинарная кавычка) и \ (обратный слэш).

quote_table_name(table_name) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 71
def quote_table_name(table_name)
  quote_column_name(table_name)
end

Приводит имя таблицы к цитируемому виду. По умолчанию используется цитирование имени столбца.

quote_table_name_for_assignment(table, attr) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 83
def quote_table_name_for_assignment(table, attr)
  quote_table_name("#{table}.#{attr}")
end

Переопределяет метод для возвращения цитируемого имени таблицы для присваивания. По умолчанию используется цитирование имени таблицы.

Это работает для mysql2, где table.column может использоваться для разрешения неоднозначности.

Мы переопределяем это в адаптерах sqlite3 и postgresql, чтобы использовать только имя столбца (согласно требованиям синтаксиса).

quoted_date(value) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 114
def quoted_date(value)
  if value.acts_like?(:time)
    if ActiveRecord::Base.default_timezone == :utc
      value = value.getutc if value.respond_to?(:getutc) && !value.utc?
    else
      value = value.getlocal if value.respond_to?(:getlocal)
    end
  end

  result = value.to_s(:db)
  if value.respond_to?(:usec) && value.usec > 0
    result << "." << sprintf("%06d", value.usec)
  else
    result
  end
end

Приводит значения даты/времени к цитируемому виду для использования в SQL-запросах. Включает микросекунды, если значение является объектом Time, поддерживающим usec.

quoted_false() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 104
def quoted_false
  "FALSE"
end
quoted_true() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 96
def quoted_true
  "TRUE"
end
type_cast(value, column = nil) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 26
      def type_cast(value, column = nil)
        if value.is_a?(Base)
          ActiveSupport::Deprecation.warn(<<~MSG)
            Passing an Active Record object to `type_cast` directly is deprecated
            and will be no longer type casted as id value in Rails 6.2.
          MSG
          value = value.id_for_database
        end

        if column
          ActiveSupport::Deprecation.warn(<<~MSG)
            Passing a column to `type_cast` is deprecated and will be removed in Rails 6.2.
          MSG
          type = lookup_cast_type_from_column(column)
          value = type.serialize(value)
        end

        _type_cast(value)
      end

Преобразует значение value в тип, понятный базе данных. Например, SQLite не понимает даты, поэтому этот метод преобразует Date в String.

unquoted_false() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 108
def unquoted_false
  false
end
unquoted_true() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 100
def unquoted_true
  true
end

© 2004–2020 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API