2009-03-16 11 views
1

Also hier ist eine kurze Frage. Ich benutze Rails mit einer riesigen Legacy-Datenbank, und es hat viele gebrochene Fremdschlüssel, die als Nils behandelt werden müssen. SoGebrochene Fremdschlüssel in Rails

, wenn ich tun: Foo.find (: alle,: conditions => {...},: include =>: bar)

Rails mit connect alle Balken mit SELECT * FROM Bars WHERE id IN (...). So weit, so gut, nur zwei SQL-Abfragen.

Nun ist das Problem, dass für defekte fks, wenn ich foo.bar später versuchen, Rails versucht, bar mit SELECT * FROM Bars WHERE ID = gebrochene_ID zu holen. Dann gibt es nil (korrekt für mich) zurück, aber all diese SELECT id = erweisen sich als ein großes Leistungsproblem, da es mysql mit zu vielen SQL-Abfragen bombardiert.

Gibt es eine einfache Möglichkeit zu überprüfen, ob foo.bar bereits gesetzt ist und ob es nicht nur auf Null gesetzt wird?

Antwort

1

können Sie die loaded? Methode zu testen, ob der Verein bereits geladen wurde:

foo.bar.loaded? 

Wenn Sie für eine Tatsache, dass Sie verwendet :include und foo.bar.loaded? kehrt false dann Sie über einen gebrochenen fkey fiel, diese überspringen foo.bar.

Verwandte Themen