2009-03-16 5 views
1

여기 간단한 질문이 있습니다. 나는 거대한 레거시 데이터베이스와 함께 레일즈를 사용하고 있으며, 깨진 외래 키가 많아서 닐스 (nils)로 취급해야한다. 내가 할 때레일의 깨진 외래 키

그래서 : Foo.find (: 모두 : 조건 => {...} : 포함 => : 줄) 바 SELECT * FROM 모든 바 WHERE ID IN을 연결와

레일 (...). 지금까지는 두 가지 SQL 쿼리만으로도 충분했습니다.

이제 문제는 foo.bar를 나중에 수행하려고 할 때 레일스가 SELECT * FROM bars where id = broken_id를 사용하여 막대를 다시 페치하려고 시도한다는 것입니다. 그렇다면 nil (정확하게 나를 위해)을 반환하지만 SELECT 쿼리는 많은 SQL 쿼리를 사용하여 mysql을 공격하기 때문에 중요한 성능 문제가됩니다.

foo.bar가 이미 설정되어 있는지 여부를 확인하고 강제로 nil이 아닌지 쉽게 확인하는 방법은 무엇입니까?

당신이 false은 다음 깨진 fkey 넘어 :includefoo.bar.loaded? 수익률을 사용하는 사실을 알고있는 경우
foo.bar.loaded? 

이 생략 :

답변

1

당신은 협회가 이미로드 된 경우 테스트 할 loaded? 방법을 사용할 수 있습니다 foo.bar.