我正在针对旧数据库编写Rails应用程序。此旧数据库中的一个表具有名为object_id
的列。不幸的是object_id
也是Ruby中每个对象的属性,所以当ActiveRecord尝试使用这些对象来表示查询时,它使用的是Ruby定义的object_id
,而不是数据库中的值。
遗留应用程序在超过一百万行代码中非常庞大,因此只需更改数据库中列的名称就可以作为最后的选择。
问题:
1.有没有办法让ActiveRecord / Rails使用该列的别名或同义词?
2. Ruby中是否有任何方法可以使object_id
方法的行为有所不同,具体取决于谁调用它?
3.我可以简单地覆盖我的模型中object_id方法的行为(我认为这是一个可怕的想法,但不得不问)
非常感谢任何建议。
答案 0 :(得分:2)
我只是在这里吐痰,但你可能会尝试这样的事情:
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
答案 1 :(得分:0)
查看alias_attribute http://www.railstips.org/blog/archives/2008/06/20/alias-attribute/我相信它能满足您的需求。