Сломанные внешние ключи в Rails - PullRequest
1 голос
/ 17 марта 2009

Итак, вот быстрый вопрос. Я использую Rails с огромной унаследованной базой данных, и в ней есть много неработающих внешних ключей, которые должны рассматриваться как nils.

Поэтому, когда я делаю: Foo.find (: все,: условия => {...},: include =>: bar)

Рельсы со связью всех баров с помощью SELECT * FROM баров, ГДЕ ВХОДИТ (...). Пока все хорошо, всего два sql запроса.

Теперь проблема в том, что для неработающих fks, когда я пытаюсь сделать foo.bar позже, Rails пытается перезапустить bar с помощью SELECT * FROM bars WHERE id = broken_id. Затем он возвращает nil (правильно для меня), но все эти SELECT id = оказываются главной проблемой производительности, так как он бомбардирует mysql слишком большим количеством SQL-запросов.

Любой простой способ проверить, установлен ли уже foo.bar и не просто ли принудительно установить его на ноль?

1 Ответ

1 голос
/ 17 марта 2009

Вы можете использовать метод loaded?, чтобы проверить, была ли уже загружена ассоциация:

foo.bar.loaded?

Если вы точно знаете, что использовали :include, а foo.bar.loaded? возвращает false, то вы упали на сломанную клавишу, пропустите это foo.bar.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...