2012-04-20 45 views
0

我有一種情況。我有一箇舊系統,我們將代碼替換爲Rails。 所以,表格是合同的,在舊系統中它有大約20個字段,但是在這個新的用rails製作的軟件中,我只用5個字段,過了一段時間我們會刪除所有其他字段。Rails與舊數據庫的集成

默認情況下,rails會映射表orm的所有行。我該如何選擇我想要在ActiveRecord下映射的字段?

感謝

回答

1

我在數據庫中使用ActiveRecord之外的ActiveRecord時,我沒有創建一個(hacky)解決方案。基本上我深入到ActiveRecord代碼,並看到它利用類方法:: column_names來促進字段的映射。正如其他人所指出的那樣,只是不使用你想要從數據庫中刪除的模型中的字段就可以正常工作。但是有可能Db的結構使用了一個保留字,它不會和ActiveRecord一起玩。我添加了下面的代碼來隱藏ActiveRecord中的'class'字段,因爲'class'是一個保留的名字,並且引發了各種各樣的錯誤。

private 
def self.column_names 
    orig = super 
    orig.delete('class') 
    return orig 
end 

當然你也可以修改這個從返回數組像刪除多個關鍵:

private 
def self.column_names 
    orig = super 
    ['class', 'field_one', 'field_two'].each do |field_name| 
    orig.delete(field_name) 
    end 
    return orig 
end 

希望這有助於 /salernost

+0

謝謝!而已。 – 2012-04-20 14:51:58

2

ActiveRecord的映射領域Ruby方法動態,所以你並不真的需要排除他們就是不使用它們,當你刪除它們,你會打破什麼。

+0

我會做同樣的事情,你只需要確保被忽略的字段被設置爲接受null/nil – 2012-04-20 13:44:15

+0

但是在這種情況下,如果我用params設置對象,這可能是一個安全問題。例如,現場價格。這些字段將只由舊系統設置,而新的字段將設置項目設置的成本。所以,例如,如果我們設置參數價格,rails會自動保存它。有一個解決方法呢? – 2012-04-20 14:56:10