【发布时间】:2011-07-31 01:23:21
【问题描述】:
我有一个带有“结束”列(日期时间格式)的模型,但当我尝试在查询中引用该列时,却发现 Heroku 崩溃并出现不合逻辑的 Active Record 错误。我花了两个小时尝试调试这个极其简单的查询,然后我将该列重命名为“end_at”,我的所有问题都消失了。
还有其他人遇到过这个问题吗?我很好奇这背后的原因,并希望我们可以帮助其他人避免同样的错误。有人问过before 类似的问题,但没有给出明确的答案。
【问题讨论】:
-
您遇到了什么“不合逻辑”的错误?此外,您似乎已经回答了您自己的问题(通过重命名专栏)——您要问的问题是“其他人遇到过这个问题吗?”
-
@Brett 是的,我找到了问题所在,但此时我对原因更感兴趣。我想知道为什么名为“end”的列会导致此类错误。错误是
ActiveRecord::StatementInvalid (PGError: ERROR: syntax error at or near "end",这是不合逻辑的,因为我的语法是正确的。 -
在 php 中你会尝试命名一个变量或列
<?或array_walk吗?对我来说,为什么要避免命名类class或模块module或Kernel::似乎非常明显。此外,PGError 意味着 Postgres 数据库抛出了 Rails 重新抛出的错误,因此您可以处理它。实际上,您遇到的“不合逻辑” ActiveRecord 错误是 SQL 中的语法错误,因为您将列命名为保留字(很可能)或错误地构造了查询(不太可能但可能)。 -
@Brett Bender,有效点(我永远不会在数据库优先设计中这样做),但 ActiveRecord 在生成 SQL 时不应该引用标识符吗?当我针对 SQL Server 进行代码生成时,我防御性地使用 [] 正是为了这个目的(谁知道是否有人用空格或奇数字符命名了列)
-
@Cade Roux 不知道为什么 activerecord 没有引用它的 sql 输出,原来的提问者根本没有发布任何代码,所以我们所能做的就是推测。查询可能都是手写的,并且原始开发人员错误地忘记引用该列,因为他们的最后一个数据库不在乎。也有可能真的是 ActiveRecord 的错(尽管我敢打赌,可能性比开发人员的错误要小)。
标签: mysql ruby-on-rails postgresql activerecord heroku