2009-06-10 1 views
1

ActiveRecord 메서드 또는 named_scope 체인이 주어지면 실제로 실행하지 않고 실행될 SQL을 반환하는 방법이 있습니까?특정 메서드 또는 named_scope에서 실행될 SQL을 가져옵니다.

Vote.positive.count.sql #=> "SELECT COUNT(*) FROM votes WHERE value > 0" 

이 기능을 제공하는 플러그인 또는 기본 제공 방법이 있습니까? 그렇지 않다면 내 자신의 플러그인을 빌드하기 시작할 수있는 단서 또는 적어도 현재 프로젝트의 솔루션을 찾으십시오.

건배

답변

1

너무 오래되었지만 Rails3이 DB를 치는 모든 스코프/파인더/모델 방법에서이를 지원할 것이라는 점을 지적하는 것이 유용 할 것이라고 생각했습니다.

4

당신과 같이 명명 된 범위를 벗어난 정보를 얻을 수 있습니다 : 전체 SQL 문을 얻기에 관해서는

Vote.positive.proxy_options 

를, 액티브 함께 construct_finder_sql라는 보호 방법을 사용하여이 문제를 넣습니다.

그래서 당신이 시도 할 수 :

Vote.positive.send(:construct_finder_sql, {}) 

사용되는 방법은 계산 쿼리에 대한 다른 :

Vote.positive.send(:construct_calculation_sql, :count, :id, {}) 
빈 해시 인수가 :conditions 같은 키를 가질 수 두 경우 모두

, :order, :limit 또는 이러한 방법의 시체를 검사하여 발견 할 수있는 몇 가지 추가 옵션.

관련 문제