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



我正在将一个项目从 Rails 3.2 升级到 Rails 4.0,并且我正在尝试解决导致弃用警告的问题。该警告是由如下所示的查询引起的:

email = Email.
  includes(:person).
  where("lower(email) = ? ", login_email.downcase).
  first
在这里,"电子邮件">

表有一个字符串列"电子邮件",其中包含电子邮件地址。

弃用警告是 Rails 4 警告,它说由于我将 where(( 与 SQL 字符串一起使用并且我使用 include(( 来快速加载,我应该使用 references(( 来做正确的连接工作,这样 rails 就不必解析 SQL 来找出连接。在这种情况下,我使用的 SQL 引用了我正在查询的模型,而不是关联,因此 SQL 不涉及联接。为了消除警告,我很想做以下废话,说连接引用是查询模型:

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

但这并不能使弃用警告静音。

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

在这种情况下,有关如何

解决导致弃用警告的问题的任何提示?警告本身提供的提示在这里并不真正适用。

干杯克里斯

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

参加这个讨论,看看替代方案。否则,我建议修复弃用警告(使用新语法(并避免将弃用静音。

最新更新