【发布时间】:2016-02-01 17:19:54
【问题描述】:
我正在将一个项目从 Rails 3.2 升级到 Rails 4.0,并且我正在尝试解决一个导致弃用警告的问题。警告是由这样的查询引起的:
email = Email.
includes(:person).
where("lower(email) = ? ", login_email.downcase).
first
这里的“emails”表有一个字符串列“email”,其中包含电子邮件地址。
弃用警告是 Rails 4 的警告,它说由于我使用带有 SQL 字符串的 where() 并且我使用 include() 进行急切加载,我应该使用 references() 来完成正确的加入工作,这样 Rails 就不必解析 SQL 来找出连接。在这种情况下,我使用的 SQL 引用了我从中查询的模型,而不是关联,因此 SQL 不涉及连接。为了消除警告,我很想做以下废话,说连接引用是查询模型:
email = Email.
includes(:person).
where("lower(email) = ? ", login_email.downcase).
references(:emails).
first
但这不会使弃用警告静音。
问题简而言之:我用 SQL 调用 where() 引用了我从中查询的模型,我正在使用 include() 从与上述 SQL 无关的表中预加载数据,但我我被要求在不适用的情况下使用 references()。
关于如何解决在这种情况下导致弃用警告的问题的任何提示?警告本身提供的提示在这里并不适用。
干杯, 克里斯
【问题讨论】:
-
也许限定列名 (
lower(emails.email)) ?
标签: ruby-on-rails ruby-on-rails-4 rails-activerecord