Spec-Zone.ru › Ruby on Rails 8.1

модуль 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 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.

Spec-Zone.ru

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