1

抽象ActiveRecord屬性而不進一步標準化數據庫的最佳方式是什麼?摘要ActiveRecord屬性

例如,假設有一列zip_code和方法命名addresses數據庫表以確定郵政編碼是有效的:

class Address < ActiveRecord::Base 
    def zip_code_valid? 
    .. 
    end 
end 

我寧願:

class Address < ActiveRecord::Base 
    .. 
end 

class ZipCode 
    def valid? 
    .. 
    end 
end 

當我執行Address.find(1).zip_code時,它返回一個ZipCode與一個字符串。我不想通過創建一個名爲zip_codes的表來標準化數據庫。這個例子是假設的,我目前還沒有真實的例子。我只是想知道我怎麼可能做到這一點。

謝謝。

回答

0

我不確定你爲什麼想要做這正如你所討論的ZipCode,但要回答你的問題,你應該考慮使用Rails聚合。

這裏的文檔:

http://api.rubyonrails.org/classes/ActiveRecord/Aggregations/ClassMethods.html

如果您有關於你要完成的事情,具體的問題,讓我知道,我可以嘗試回答這些具體問題。

+0

謝謝。地址和郵政編碼的例子就是一個例子,我很快就想到要解釋我想要做什麼。我正在試圖找到抽象ActiveRecord屬性的最佳方法,而不用進一步標準化數據庫。我會看看你鏈接到的文件。 – 2011-05-06 18:18:30

+0

我儘量多。我已經做了許多次相同的事情,用一個例子來解釋起來更容易,但有時候很難想出一個容易描述的例子。我希望你能在Aggregations中找到你想要的東西。如果您有任何問題,請告訴我。 – 2011-05-06 18:20:37

0

如果你不打算在街道,門牌號碼,城市等等做同樣的事情,我不認爲抽象出一個類的郵政編碼是有意義的。你已經把它作爲一個單獨的列在地址表,因此將它存儲在自己的類中(從ActiveRecord的角度來看)是沒有意義的。另外,如果你將郵政編碼存儲在他們自己的表格(以及班級)中,你會得到什麼?在我看來,如果在一個單獨的類/表中保留單個屬性太過分了,因爲它是當前所處理的聚合的一部分。

+0

謝謝。這是一個關於將抽象推到邊緣的假設性問題。昨天晚上,我正在閱讀Code Complete和抽象數據類型部分,這個問題在我腦海中浮現。 雖然它可能會太過分,但我們假設將來會有幾十個只與郵政編碼相關的方法,在這種情況下,我相信將方法抽象爲ZipCode vs Address是有益的。 – 2011-05-06 18:04:19

+0

如果你打算對這個問題作出判斷,你至少應該首先提供一個答案。 – 2011-05-06 18:05:18

+0

@jesse - 你在開玩笑吧?你意識到我確實提供了一個答案嗎?我的回答是,他應該堅持他提供的第一個例子,而不是將它抽象爲自己的類。另一位選民意識到並投票給我。很明顯,如果我爲了避免將郵政編碼放入自己的班級而爲他提供了一個深入的答案,我就會讀到這個問題。 – McStretch 2011-05-06 18:08:58