我有一種情況。我有一箇舊系統,我們將代碼替換爲Rails。 所以,表格是合同的,在舊系統中它有大約20個字段,但是在這個新的用rails製作的軟件中,我只用5個字段,過了一段時間我們會刪除所有其他字段。Rails與舊數據庫的集成
默認情況下,rails會映射表orm的所有行。我該如何選擇我想要在ActiveRecord下映射的字段?
感謝
我有一種情況。我有一箇舊系統,我們將代碼替換爲Rails。 所以,表格是合同的,在舊系統中它有大約20個字段,但是在這個新的用rails製作的軟件中,我只用5個字段,過了一段時間我們會刪除所有其他字段。Rails與舊數據庫的集成
默認情況下,rails會映射表orm的所有行。我該如何選擇我想要在ActiveRecord下映射的字段?
感謝
我在數據庫中使用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
ActiveRecord的映射領域Ruby方法動態,所以你並不真的需要排除他們就是不使用它們,當你刪除它們,你會打破什麼。
我會做同樣的事情,你只需要確保被忽略的字段被設置爲接受null/nil – 2012-04-20 13:44:15
但是在這種情況下,如果我用params設置對象,這可能是一個安全問題。例如,現場價格。這些字段將只由舊系統設置,而新的字段將設置項目設置的成本。所以,例如,如果我們設置參數價格,rails會自動保存它。有一個解決方法呢? – 2012-04-20 14:56:10
謝謝!而已。 – 2012-04-20 14:51:58