在具有“已更改”列的表上使用 activerecord 会引发错误

Posted

技术标签:

【中文标题】在具有“已更改”列的表上使用 activerecord 会引发错误【英文标题】:Using activerecord on a table with a colum `changed` raises error 【发布时间】:2011-03-15 22:10:33 【问题描述】:

旧数据库有一个列 changed(包含一个 updated_at 时间戳)。

这导致错误改变了吗?由 ActiveRecord 定义,但仅当我打开它的关联时。

我已经尝试过:

覆盖instance_method_already_implemented? 还有alias该专栏。 使用write_attributeread_attribute 添加自定义方法。

但这些都不能避免失败。

changed 列可以存在吗?有吗?我宁愿不必更改表,因为这也意味着要更改很多遗留代码。

【问题讨论】:

【参考方案1】:

ActiveRecord 的少数缺点之一是所有已采用的属性名称。这是其中之一,解决 ActiveRecord 的声明可能是一个容易出错的噩梦。

如果您的数据库支持它们,您可以创建一个表视图来向 ActiveRecord 显示不同的列名。

【讨论】:

我的数据库 (mysql) 支持这一点,这听起来不错,因为它也解决了我遇到的一些其他问题。谢谢指点。【参考方案2】:

尝试在初始化程序中禁用 ActiveRecord 中的部分更新:

ActiveRecord::Base.partial_updates = false

【讨论】:

我认为这会禁用脏检查,但它仍然会定义更改后的方法。 不 :(。我试过这个,但它仍然失败。为了记录:我在 rake 任务中使用它,所以我尝试了一个初始化程序并在 rake 开始时设置它任务。但错误仍然存​​在。

以上是关于在具有“已更改”列的表上使用 activerecord 会引发错误的主要内容,如果未能解决你的问题,请参考以下文章

没有主键和空列的表上的实体框架反向 poco

一个表上具有不同列的 SQL 连接

mysql在具有1亿行的表上创建索引

使用 DbVisualizer 在具有包含 COALESCE() 的唯一索引的表上出现 SQLITE_CORRUPT 错误

如何在具有现有 order by 的表上使用 OVER(ORDER BY())?

在具有聚集列存储索引的表上创建触发器 - 错误