ruby-on-rails - 使用 Rails/ActiveRecord 覆盖旧数据库中列的别名或别名

标签 ruby-on-rails database activerecord

我正在针对遗留数据库编写 Rails 应用程序。此遗留数据库中的一个表有一个名为 object_id 的列。不幸的是 object_id 也是 Ruby 中每个对象的属性,所以当 ActiveRecord 试图使用这些对象来制定查询时,它使用的是 Ruby 定义的 object_id,而不是数据库中的值。

遗留应用程序非常庞大,代码超过一百万行,因此仅更改数据库中列的名称将是最后的选择。

问题:
1. 有没有什么办法可以让ActiveRecord/Rails为这个列使用别名或同义词?
2. 在 Ruby 中有什么方法可以使 object_id 方法根据调用者的不同而有不同的行为?
3. 我可以简单地覆盖模型中 object_id 方法的行为吗(我认为这是一个糟糕的想法,但不得不问)

非常感谢任何建议。

最佳答案

我只是在这里吐口水,但你可以尝试这样的事情:

class Legacy < ActiveRecord::Base
  #... all the other stuff

  #give yourself a way to access the DB version of object_id
  def oid
    attributes[:object_id]
  end
  def oid=(val)
    attributes[:object_id]=val
  end

  #restore ruby's default #object_id implementation
  def object_id
    super
  end
end

关于ruby-on-rails - 使用 Rails/ActiveRecord 覆盖旧数据库中列的别名或别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4348037/

相关文章:

ruby-on-rails - 对等方重置 Redis/SideKiq/Rails 连接 - SSL_connect

ruby-on-rails - Redis保存一个hash并得到一个hash

ruby-on-rails - 如何从rails中的数据库中自动删除一条记录

database - 将旧数据从 postgres 导入到 elasticsearch

php - 当 sql 查询不返回任何内容时,Codeigniter 事件记录语句未运行

ruby-on-rails - 如何在 ubuntu 上的 LAMP 中的 Apache 中部署 Ruby On Rails 应用程序,而无需安装 Ruby 和 Rails

mysql - 使用 Rails 连接到远程 MySQL 主机时出现问题

php - 使用php按类别显示表格

sql - 如何使用 ActiveRecord 编写连接查询?

ruby-on-rails - Rails 创建表迁移应该有created_at 和updated_at 吗?