2014-04-18 76 views
0

我有一個名爲組織的模型,其中包含其地址的字段。在模型中,我有before_save { self.address_line_1 = address_line_1.titleize }聲明,並且剛剛意識到這是將PO Box改爲Po Box的地址。Ruby on Rails - 標題例外

另一個例子:我也有一個名字/姓氏的標準用戶模型。 Titleize會將一個人的名字從TJ改爲Tj。或者,如果他們的姓氏被連字符連接,它將從史密斯瓊斯去史密斯瓊斯。

使用郵政信箱我會知道提前例外,但不是用戶的名字。是否有任何方法可以允許這些異常,同時仍具有核心Titlsize功能?

回答

1

我建議儘量避免改變titlelize的語義,以避免以後在相同應用程序的另一部分中可能會期望它發生問題,以便實現它真正打算執行的操作。既然你正在尋找一些比較專業的功能爲titleize我想創建一個新的,類似的方法,你可以猴子補丁放到String類,如上述,所謂的像,abook_titleize(地址簿titleize):

class String 
    def abook_titleize 
    if allow_titleize(self) 
     titleize 
    else 
     # Check for other behaviors, such as if "self" is all consonants 
     # or if self is found in a predetermined list of acronyms, 
     # perhaps return self.upcase 
     self.upcase 
    end 
    end 

private 
    def allow_titleize(s) 
    # Write some code here that determines if you want this string 
    # to be titleized and return true if so, otherwise false 
    end 
end 

或類似的東西。你可以按照你的意願簡單或精心製作。如果你真的想改變titleize bahavior本身(再次,我不會推薦),那麼:

class String 
    :alias_method :old_titleize, :titleize 

    def titleize 
    if allow_titleize(self) 
     old_titleize 
    else 
    ...