2011-01-07 76 views
1

我有很多遺留數據庫,我需要從中抽取原始數據。數據庫中的每個表都有任意名稱和任意字段集合。我已經越來越對這些字段具有以下級接入:對遺留表使用ActiveRecord類

class Frt < ActiveRecord::Base 
    establish_connection :legacy 
    set_primary_key "point" 
end 

當我到達我的代碼的地步,我知道表名,我可以撥打:

Frt.set_table_name "table" 
t = Frt.find_by_sql("blah") 
something = t.field_name + t.other_field_name 
etc... 

的問題是,我已經意識到,這將可訪問的字段名稱鎖定到我首先選擇的任何表。如果我嘗試通過對`set_table_name'方法的另一個調用來更改表,它將更改該類的屬性,但是任何新實例仍將具有與第一個相同的一組字段。到目前爲止,在我的應用程序中,我不需要其他任何東西,但是我正在以一種方式擴展該程序,我知道它會咬我的腳步。

我試過`Frt.send:set_table_name「new_table」',希望它會導致ActiveRecord再次做到這一點。它沒有。

任何人都可以建議我怎麼能夠保持ActiveRecord的便利,但得到它動態重映射它的領域,無論我需要加載的任何表?

+0

你可以發佈你的代碼的其餘部分?你在哪裏做ActiveRecord obj? – sethvargo 2011-01-07 17:58:50

+0

這不是我上面的嗎? 't = Frt.find_by_sql(「blah」)' – 2011-02-02 13:22:41

回答

1

很抱歉回答我自己的帖子,但我想我沒有很好地解釋它。如果有人在此之後出現,我需要做的是發出一個調用「Frt.reset_column_information」方法。我正在重新討論這個問題,並將所有方法都放在ActiveRecord類中,並發現其中一個潛伏在列表中。

0

解決此問題的更好方法是爲每個需要與之交互的傳統表創建模型 - 不需要動態表名重新映射,它可以直接使用。