레일스 제휴가 열심히로드되었는지 확인하는 방법을 아는 사람이 있습니까?레일스 연관이 열심히로드되었는지 확인하는 방법은 무엇입니까?
내 상황 : 때로는 연관 중 하나가 열심히로드되고 때로는 그렇지 않은 결과 세트가 있습니다. eager-loaded가 아닌 경우 ActiveRecord의 find를 사용하여 연관을 찾아야합니다. 그것이 열심히로드되면, 나는 detect를 사용하고 싶다.
예를 들어, 항목 모델에 shipping_info 개체의 "has_many"배열이 있다고 가정 해보십시오. 그런 다음 : 항목이로드, 가장 효율적인 부하가 열망되어 있지 않은 경우
item.shipping_infos.detect { |si| si.region == "United States" }
: 항목이로드 열망 경우
는 가장 효율적인 부하는item.shipping_infos.where(region: "United States").first
그러나 나는 그 여부를 알 수없는 한 열심히로드 된, 나는 레코드를 효율적으로 얻으려면 어떤 코드를 호출 해야할지 모르겠다. 열심히로드되지 않았을 때 첫 번째 방법을 사용하면 필요한 것보다 많은 DB 레코드를 조회해야합니다. 두 번째 방법을 열심히 읽었을 때 두 번째 방법을 사용하면로드 된 객체가 무시됩니다.
감사합니다. Bryan. 나는 네가 어디에서 왔는지 이해한다. 이 특정 코드는 전체 앱에서 가장 자주 호출되는 partial에 존재합니다. 따라서 마이크로 세컨드에서 면도 할 경우 측정 가능한 차이가 있습니다. #loaded 줄거야? 시도. – wbharding
이것은 has_many 연관에서만 작동합니다! belongs_to의 경우이 호출은 실제로 다른 객체를로드합니다 (따라서 항상 true가됩니다) – reto