2010-01-20 3 views
0

그래서 조인 매개 변수를 포함하는 몇 개의 다른 명명 된 범위가있는 ActiveRecord 클래스가 있습니다. 두 번째를 실행할 때 내가 어떤 이유로 나에게 그것을 보여주는 런타임 오류 -중첩 된 명명 된 범위와 조인 (폭발적인 오류)

내 문제는 3 행에

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 

가 : 보고서를 실행하는 동안, 나는 하나가 다른 내부 호출되는 상황이 일이 외부 쿼리에서 조인 범위를 유지 관리하고 있는지 쿼리합니다. 실제로 외부 쿼리와 컨텍스트를 공유하지 않고 자체적으로 별도로 실행해야합니다. 어떤 생각이나 생각?

당신은

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

이 제거됩니다 찾고있는

답변

1

(나는 문제가 "ambigious 열이"두 쿼리에서 가입되어 하나 개의 테이블이 오류 때문이라고 언급한다) 블록에 현재 사용중인 범위.

사용 예 :

# 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에 쿼리합니다. 이렇게하면 논리가 컨트롤러가 아니라 모델에 래핑됩니다.

+0

감사합니다. jonnii! 한 노트는 "with_exclusive_scope"가 적어도 레일 2.3.2에서 보호되어 있으므로 사용해야하는 코드는 다음과 같습니다 :

 Model.send(:with_exclusive_scope) 

+0

일반적으로 컨트롤러 내에서는 사용하지 않을 것이고, 내 포스트를 그것을 사용하는 방법을 보여줍니다. – jonnii