Spec-Zone.ru › Ruby on Rails 7.2

модуль Arel

Константы

VERSION

Методы публичного класса

sql(sql_string, *positional_binds, retryable: false, **named_binds) Показать исходный код
# 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.

Spec-Zone.ru

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