我正在爲舊數據庫編寫Rails應用程序。這個遺留數據庫中的一個表格有一個名爲object_id
的列。不幸的是,object_id
也是Ruby中每個對象的屬性,所以當ActiveRecord試圖使用這些對象來制定查詢時,它使用的是Ruby定義的object_id
,而不是數據庫中的值。使用Rails/ActiveRecord覆蓋或使用舊數據庫中的別名名稱
傳統的應用程序有超過一百萬行代碼,因此只需更改數據庫中列的名稱即可作爲最後選擇。
問題:
1.有什麼辦法讓ActiveRecord/Rails使用這個列的別名或同義詞嗎?
2. Ruby中有什麼方法可以使object_id
方法的行爲有所不同,具體取決於誰在調用它?
3.我可以簡單地覆蓋我的模型中的object_id方法的行爲(我認爲這是一個可怕的想法,但不得不問)
任何建議,非常感謝。
感謝您的意見。這絕對有助於解決問題的一部分。問題的另一部分是ActiveRecord在生成where子句時需要調用原始列名稱。例如,當我執行'Object.find_by_oid(3)'時,它將生成`select * from object_table where oid = 3`,這將導致錯誤,因爲在數據庫中該列實際上並不被稱爲oid。 – mberning 2010-12-03 20:14:48