我正在针对遗留数据库编写 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/