我正在将项目从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()。
在这种情况下,有关如何解决导致弃用警告的问题的任何提示?警告提供的提示本身并不适用。
干杯, 克里斯
答案 0 :(得分:0)
您可以在每个环境中关闭弃用警告......但我不建议这样做(特别是在开发/测试中,它们是有用的警告)。
以this discussion为例看看其他选择。否则,我建议修复弃用警告(使用新语法)并避免忽略弃用。