Так что в основном я пытаюсь разобраться в консоли 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, если потребуется.
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
Вышеуказанное состояние возвращает все книги, в том числе доступные.