rails3: как вы объединяете подмножества больших таблиц, поскольку объединения / ассоциации, кажется, не поддерживают это - PullRequest
0 голосов
/ 20 августа 2011

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

1 Ответ

0 голосов
/ 20 августа 2011
class Foo

  cattr_accessor :special_val

  belongs_to :special_bar,
             ...
             :conditions => proc { "special = #{self.class.special_val}" }


end

Не проверено, но я думаю, что это будет работать, хотя это не красиво.

Foo.special_val = 20
Foo.special_bar

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...