модуль ActiveRecord::ConnectionAdapters::Quoting
Общедоступные методы экземпляра
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 9
def quote(value, column = nil)
# records are quoted as their primary key
return value.quoted_id if value.respond_to?(:quoted_id)
if column
value = column.cast_type.type_cast_for_database(value)
end
_quote(value)
end Приводит значение столбца в кавычки, чтобы предотвратить атаки типа SQL-инъекция.
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 45 def quote_column_name(column_name) column_name end
Приводит имя столбца в кавычки. По умолчанию кавычки не используются.
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 40 def quote_string(s) s.gsub(/\/, '\&\&').gsub(/'/, "''") # ' (for ruby-mode) end
Приводит строку в кавычки, экранируя символы ' (одинарная кавычка) и \ (обратный слэш).
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 50 def quote_table_name(table_name) quote_column_name(table_name) end
Приводит имя таблицы в кавычки. По умолчанию используется приведение имен столбцов в кавычки.
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 62
def quote_table_name_for_assignment(table, attr)
quote_table_name("#{table}.#{attr}")
end Переопределяет метод для возвращения имени таблицы в кавычках для присваивания. По умолчанию используется приведение имени таблицы в кавычки.
Это работает для mysql и mysql2, где table.column можно использовать для разрешения неоднозначности.
Мы переопределяем это в адаптерах sqlite3 и postgresql, чтобы использовать только имя столбца (согласно требованиям синтаксиса).
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 82
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
value.to_s(:db)
end # File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 74 def quoted_false "'f'" end
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 66 def quoted_true "'t'" end
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 23
def type_cast(value, column)
if value.respond_to?(:quoted_id) && value.respond_to?(:id)
return value.id
end
if column
value = column.cast_type.type_cast_for_database(value)
end
_type_cast(value)
rescue TypeError
to_type = column ? " to #{column.type}" : ""
raise TypeError, "can't cast #{value.class}#{to_type}"
end Преобразует значение в тип, понятный базе данных. Например, SQLite не понимает даты, поэтому этот метод преобразует объект Date в String.
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 78 def unquoted_false 'f' end
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 70 def unquoted_true 't' end
© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.