Разница между этими двумя запросами при объединении и включением слиянием

0

Так что в основном я пытаюсь разобраться в консоли rails, и я узнал, что есть некоторые отличия при запросе с объединениями и включает. Я знаю разницу между ними, например, ленивую загрузку с использованием объединения и надежной загрузки с использованием включений. Но ниже код, похоже, меня смущает, они разные, и почему не объединяется работа с включенными.

Table1.joins(:table2).merge(Table2.where(field_of_table2: "value")

Table1.joins(:table2).where(:table2 => {field_of_table2: "value"})

Оба, похоже, дают мне тот же результат.

Table1.includes(:table2).merge(Table2.where(field_of_table2: "value")

Слияние, похоже, не работает, но,

Table1.includes(:table2).where(:table2 => {field_of_table2: "value")

работает, но снова генерирует сложную инструкцию sql.

Я новичок в этом, Пожалуйста, помогите мне понять любые негативные последствия использования этих двух утверждений. Я буду рад опубликовать выражение sql, если потребуется.

Теги:

1 ответ

0
Лучший ответ

Merge - Слияние в условиях из таблицы 2, если table2 является ActiveRecord :: Relation. Возвращает массив, представляющий пересечение результирующих записей с таблицей 2, если table2 является массивом.

Где - Возвращает новое отношение, которое является результатом фильтрации текущего отношения в соответствии с условиями в аргументах.

Где в основном фильтрует текущее отношение для условия, но слияние возвращает общие строки другого отношения.

Напр.

class Book < ActiveRecord::Base
  scope :available, where(:available => true)
end

class Author < ActiveRecord::Base
  has_many :books
  scope :with_available_books, joins(:books).merge(Book.available)
end


Author.with_available_books

Вышеуказанное состояние возвращает все книги, в том числе доступные.

  • 0
    Но почему не объединить работу с включениями
  • 0
    В чем разница между запросом, содержащим слияние, и запросом без слияния
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню