модуль Arel
Константы
- VERSION
Открытые методы класса
# File activerecord/lib/arel.rb, line 52
def self.sql(sql_string, *positional_binds, retryable: false, **named_binds)
if Arel::Nodes::SqlLiteral === sql_string
sql_string
elsif positional_binds.empty? && named_binds.empty?
Arel::Nodes::SqlLiteral.new(sql_string, retryable: retryable)
else
Arel::Nodes::BoundSqlLiteral.new sql_string, positional_binds, named_binds
end
end Оборачивает заведомо безопасную строку SQL для передачи методам запросов, например:
Post.order(Arel.sql("REPLACE(title, 'misc', 'zzzz') asc")).pluck(:id)
Необходимо проявлять особую осторожность, чтобы избежать уязвимостей, связанных с SQL-инъекциями. Этот метод не следует использовать с небезопасными значениями, такими как параметры запроса или атрибуты модели.
Дополнительную информацию см. в руководстве по безопасности.
Для создания более сложного фрагмента запроса, в том числе с возможным использованием предоставленных пользователем значений, sql_string может содержать заполнители ? и :key, соответствующие дополнительным аргументам. Обратите внимание, что такое поведение применяется только при передаче параметров значений привязки в вызове; без них токены-заполнители не имеют особого значения и передаются в запрос без изменений.
Параметр :retryable можно использовать, чтобы пометить SQL как безопасный для повторного выполнения. Используйте этот параметр только в том случае, если SQL идемпотентен, поскольку он может быть выполнен более одного раза.
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.