修复弃用警告:where()使用自引用SQL,但也使用includes()

时间:2016-02-01 17:19:55

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord

我正在将项目从Rails 3.2升级到Rails 4.0,我正在尝试解决导致弃用警告的问题。警告是由类似这样的查询引起的:

email = Email.
  includes(:person).
  where("lower(email) = ? ", login_email.downcase).
  first

此处“电子邮件”表格中包含一个字符串列“email”,其中包含电子邮件地址。

弃用警告是Rails 4,它说我使用带有SQL字符串的where()并且我使用includes()来加载,我应该使用references()来做一个正确的加入工作,以便rails不必解析SQL来找出连接。在这种情况下,我使用的SQL引用了我要查询的模型,而不是关联,因此没有涉及SQL的连接。为了使警告保持沉默,我很想做下面的废话,说连接参考是查询模型:

email = Email.
  includes(:person).
  where("lower(email) = ? ", login_email.downcase).
  references(:emails).
  first

但这并没有使弃用警告无声。

问题简而言之:我在使用SQL调用where()引用我正在查询的模型,我使用includes()来从与上述SQL无关的表中急切加载数据,但是我我被要求在不适用的情况下使用references()。

在这种情况下,有关如何解决导致弃用警告的问题的任何提示?警告提供的提示本身并不适用。

干杯, 克里斯

1 个答案:

答案 0 :(得分:0)

您可以在每个环境中关闭弃用警告......但我不建议这样做(特别是在开发/测试中,它们是有用的警告)。

this discussion为例看看其他选择。否则,我建议修复弃用警告(使用新语法)并避免忽略弃用。