У меня есть этот прецедент, где я получаю символизированные глубокие ассоциации от определенной модели, и мне приходится выполнять определенные запросы, которые связаны с использованием внешних соединений. Как это сделать, не прибегая к написанию полного SQL вручную?Arel: Левое внешнее соединение с использованием символов
Ответы, которые я не хочу: - Использование включает (не разрешает глубокие ассоциации очень хорошо (.includes (: cars => [: windows,: engine => [: ignition] ..... works неожиданно), и я не хочу его побочных эффектов) - писать SQL сам (извините, это 2013 год, поддержка кросс-db и т. д. и т. д.), а объекты, которые я получаю, являются read_only, больше побочных эффектов)
Я хотел бы иметь решение Arel. Я знаю, что с использованием isl_table из моделей я могу создавать выражения SQL, есть также DSL для соединений, но почему-то я не могу использовать его в методе joins из модели:
car = Car.arel_table
engine = Engine.arel_table
eng_exp = car.join(engine).on(car[:engine_id].eq(engine[:id]))
eng_exp.to_sql #=> GOOD! very nice!
Car.joins(eng_exp) #=> Breaks!!
Почему это не работает вне меня. Я точно не знаю, чего не хватает. Но это самое близкое к решению, которое у меня есть сейчас. Если кто-то может помочь мне заполнить мой пример или дать мне приятный обход или сказать мне, когда Rails включит такую явно необходимую функцию, я буду иметь свою вечную благодарность.
Ну, это ближе всего к ответу, мы когда-нибудь, я боюсь, моя единственная проблема - быть предыдущим знанием ключей ассоциации (я хотел бы иметь более готовое решение по этому поводу, например, обычные обычные внутренние AR-соединения). Но это, безусловно, лучший ответ на этот вопрос, я уже разработал решение, основанное на нем. Thx снова. – ChuckE