Вложенные именованные области с объединениями (взрывная ошибка) - PullRequest
0 голосов
/ 20 января 2010

Итак, у меня есть класс ActiveRecord с парой разных именованных областей, которые включают параметры соединения. Во время работы с отчетом у меня возникает ситуация, когда один вызывается внутри другого:


1 Model.scope_with_some_joins.find_in_batches do |models|
2   models.each do |mdl|
3     other_comparisons = Model.scope_with_other_joins
4   end
5 end

Моя проблема в строке 3 - я получаю ошибку во время выполнения, показывающую мне, что по какой-то причине при выполнении второго запроса он поддерживает область соединения из внешнего запроса. На самом деле мне нужно, чтобы он запускался отдельно, без разделения контекста с внешним запросом. Есть мысли или идеи?

(я должен упомянуть, что проблема связана с ошибкой "неоднозначного столбца", поскольку в обоих запросах есть одна таблица)

1 Ответ

1 голос
/ 20 января 2010

Вы ищете

Model.with_exclusive_scope { ...do your find in here... } 

Это удалит все области, которые в данный момент используются для блока.

Пример использования:

# in model.rb
def self.find_stuff
  self.scope_with_some_joins.find_in_batches do |models|
    models.each do |mdl|
      self.with_exclusive_scope do
        other_comparisons = self.scope_with_other_joins
      end
    end
  end
end

Затем вы запрашиваете Model.find_stuff. Таким образом, логика заключена в модели, а не в контроллере.

...