Я обновляю проект с Rails 3.2 до Rails 4.0, и я пытаюсь исправить проблему, вызывающую предупреждение об устаревании. Предупреждение вызвано запросом, как этот:Исправить предупреждение об устаревании: where() с саморефлексирующим SQL, но также использует включает()
email = Email.
includes(:person).
where("lower(email) = ? ", login_email.downcase).
first
Здесь «письмо» таблица имеет строковый столбец «электронную почту», который содержит адрес электронной почты.
Предупреждение об исключении - это Rails 4, который говорит, что, поскольку я использую where() с строкой SQL, и я использую include() для загрузки с нетерпением, я должен использовать ссылки() для выполнения правильной работы присоединяется, так что рельсы не должны анализировать SQL для определения соединения. В этом случае SQL, который я использую, ссылается на модель, с которой я запрашиваю, а не на ассоциацию, поэтому нет соединения с SQL. Чтобы отключить предупреждение, я был соблазн сделать следующий немного нонсенс, говоря о том, что ссылки присоединиться является модель запрашивая:
email = Email.
includes(:person).
where("lower(email) = ? ", login_email.downcase).
references(:emails).
first
Но это не молчание предупреждение устаревания.
Проблема в двух словах: я вызываю where() с SQL, который ссылается на модель, с которой я запрашиваю, я использую include() для загрузки данных из таблицы, не связанной с вышеупомянутым SQL, но Меня спрашивают использовать ссылки() в ситуации, когда это не применяется.
Любые советы по устранению проблемы, вызывающей предупреждение об утомлении в этом случае? Наконечник, предоставленный самим предупреждением, на самом деле не применяется.
Приветствие, Chris
возможно квалифицировать имя столбца ('lower (emails.email)')? –