使用Rails / 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