модуль ActiveRecord::ConnectionAdapters::Quoting
Общедоступные методы экземпляров
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 11
def quote(value)
value = id_value_for_database(value) if value.is_a?(Base)
if value.respond_to?(:value_for_database)
value = value.value_for_database
end
_quote(value)
end Приводит значение столбца к кавычкам, чтобы предотвратить атаки SQL-инъекции.
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 67 def quote_column_name(column_name) column_name.to_s end
Приводит имя столбца к кавычкам. По умолчанию кавычки не применяются.
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 62
def quote_string(s)
s.gsub('\\', '\&\&').gsub("'", "''") # ' (for ruby-mode)
end Приводит строку к кавычкам, экранируя символы ' (одинарная кавычка) и \ (обратный слэш).
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 72 def quote_table_name(table_name) quote_column_name(table_name) end
Приводит имя таблицы к кавычкам. По умолчанию используются кавычки для имен столбцов.
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 84
def quote_table_name_for_assignment(table, attr)
quote_table_name("#{table}.#{attr}")
end Переопределяет метод для возврата имени таблицы в кавычках для присваивания. По умолчанию используются кавычки для имен таблиц.
Это работает для mysql2, где table.column можно использовать для разрешения неоднозначности.
Мы переопределяем это в адаптерах sqlite3 и postgresql, чтобы использовать только имя столбца (в соответствии с требованиями синтаксиса).
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 115
def quoted_date(value)
if value.acts_like?(:time)
zone_conversion_method = ActiveRecord::Base.default_timezone == :utc ? :getutc : :getlocal
if value.respond_to?(zone_conversion_method)
value = value.send(zone_conversion_method)
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.
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 105 def quoted_false "FALSE" end
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 97 def quoted_true "TRUE" end
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 24
def type_cast(value, column = nil)
value = id_value_for_database(value) if value.is_a?(Base)
if column
value = type_cast_from_column(column, value)
end
_type_cast(value)
rescue TypeError
to_type = column ? " to #{column.type}" : ""
raise TypeError, "can't cast #{value.class}#{to_type}"
end Преобразует значение value к типу, понятному базе данных. Например, SQLite не понимает даты, поэтому этот метод преобразует Date в String.
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 109 def unquoted_false false end
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 101 def unquoted_true true end
© 2004–2019 David Heinemeier Hansson
Licensed under the MIT License.