модуль Arel
Константы
- VERSION
Методы публичного класса
# File activerecord/lib/arel.rb, line 52
def self.sql(sql_string, *positional_binds, retryable: false, **named_binds)
if 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.