그래서 두 개의 모델이있는 앱이 있습니다. Foo has_one Bar, Bar belongs_to Foo.레일 : 하나가없는 "has_one"레코드 찾기
이제는 Foo를 만들려면 막대를 만들어야합니다.하지만 내 제작 앱에는 Foo가 없으므로 균열을 건너 뛴 것처럼 보입니다. 바, 500 오류가 발생합니다.
내가 검색 할 수 있습니다 : 잘 Bar.where(:foo=>nil)
지금, 여기에 문제입니다. 그러나 고아가 된 막대는 문제가되지 않으며 이것이 내가 필요한 것을 말하지 않습니다.
바가없는 경우 Foo를 찾아야합니다. 그러나 데이터베이스는 Bars 테이블에 관계를 저장합니다. 즉, BarsTable에는 foo_id가 있고, FoosTable에는 막대가 누락되었음을 알리는 내용이 없습니다.
Foo.find(#).bar
을 사용할 때 하나의 가짜 레코드에 대해 nil을 얻지 만 많은 레코드가 있습니다.
그래서, 아무도 바가없는 Foo를 반환하는 쿼리를 생성하는 방법을 말해 줄 수 있습니까?
감사합니다.
이것은 효과가 있습니다. - Rails에서는'Foo.where (id가 아닌 (SELECT foo_id FROM Bar) ")'감사합니다! – Andrew
IMHO, 이것을하기위한 정확한 AR 방법은'SELECT \'foos \'. * FROM \'foos \'INNER JOIN \'bars \'의 SQL 질의 결과 인'Foo.joins (: bar) 'on \'bar \'. \'foo_id \'= \'foos \'. \'id \''. 'Foo.includes (: bar) .joins (: bar)'는 DB에 대한 몇 가지 후속 요청을 저장할 수 있습니다. –