Ниже приведены некоторые методы, которые вы можете использовать для преобразования запросов Rails ActiveRecord в запросы SQL:
- to_sql: этот метод возвращает соответствующий SQL-запрос для данного запроса ActiveRecord, не выполняя его. Это может быть полезно для отладки или анализа сгенерированного SQL.
Пример:
User.where(age: 18).to_sql
Выход:
SELECT "users".* FROM "users" WHERE "users"."age" = 18
- find_by_sql: этот метод позволяет выполнять пользовательские запросы SQL и возвращать объекты ActiveRecord на основе результатов запроса.
Пример:
User.find_by_sql("SELECT * FROM users WHERE age = 18")
- joins: метод joins позволяет выполнять SQL-соединения между таблицами в запросах ActiveRecord.
Пример:
User.joins(:posts).where(posts: { published: true })
При этом генерируется следующий SQL-запрос:
SELECT "users".* FROM "users" INNER JOIN "posts" ON "posts"."user_id" = "users"."id" WHERE "posts"."published" = true
- includes: метод include используется для более эффективной загрузки связанных записей, чем отдельные запросы.
Пример:
User.includes(:posts).where(posts: { published: true })
При этом генерируется два SQL-запроса: один для получения пользователей, а другой для получения связанных с ними сообщений.
- pluck: метод pluck позволяет получить определенный столбец из набора результатов в виде массива вместо извлечения целых объектов ActiveRecord.
Пример:
User.where(age: 18).pluck(:name)
Выход:
["John", "Jane", "Alice"]
- select: метод select позволяет выбрать определенные столбцы для включения в предложение SELECT сгенерированного запроса SQL.
Пример:
User.select(:name, :age)
При этом генерируется следующий SQL-запрос:
SELECT "users"."name", "users"."age" FROM "users"