Я использую Rails 3.0.0.
Я хочу иметь возможность параметризовать условия в соединениях. Это важно
для исполнения.
Из того, что я могу сказать, нет простого способа сделать это напрямую с помощью joins ().
Все joins () принимает список (в различных формах) ассоциаций. Тем не мение,
ассоциации принимают условия. Итак, вопрос в том, как я могу параметризовать
состояние ассоциации.
class Foo < ActiveRecord::Base
belongs_to :bar
belongs_to :special_bar,
:class_name => "Bar", :foreign_key => :bar_id,
:conditions => { :special => 77 } # need this condition to be a parameter
end
class Bar < ActiveRecord::Base
has_many :foo
end
Это позволяет мне:
Foo.joins( :special_bar )
Что приведет к SQL как:
...
INNER JOIN bars
ON bars.id = foo.bar_id
AND bars.special = 77 -- need to be able to control this condition
Я заметил, что условие ассоциации ограничено присоединяемым классом.
to, и что опция 'where-style' all text не поддерживается. Вместо,
грамматика "symbol => value" является единственной поддерживаемой формой.
Тем не менее, это именно то, что я хочу, за исключением того, что я должен быть в состоянии
параметризуйте '77', чтобы я мог передать значение. Еще лучше, я хотел бы быть
в состоянии передать грамматику «где стиль» для условия.
Да, я знаю, что работает следующее, но обычно оно не работает,
и мне нужно общее решение. В частности, это не удается, если мне нужно присоединиться
еще одна таблица после «И специальные = 77».
Foo.joins( :bar, "AND special = 77" )
И перемещение условия в предложение where является безумным, потому что спаривание
Огромное соединение безумие. Что нужно сделать, это предотвратить огромный
объединение в первую очередь путем установления ограничений на значения, входящие в объединение.
И нет, подзапросы тоже не работают. Мне нужно уметь заказать
результат.
Мне трудно поверить, что в ActiveRecord нет способа присоединиться к
подмножества (условно выбранные) из двух огромных таблиц и упорядочить результат.
Да, я гуглил и искал stackoverflow. Направляющие рельсы не пойдут
где-нибудь рядом с темой, подобной этой. Дискуссии вокруг темы присоединяются, как правило,
быть очень расплывчатым и очень простым.