2013-08-29 67 views
2

我對Ruby比較陌生。這可以幹掉嗎?如何?如何幹起重複的Ruby代碼?

def primary_phone 
    number_to_phone self.primary_phone_number 
end 

def primary_phone=(number) 
    self.primary_phone_number = number.gsub(/\D/, '') 
end 

def secondary_phone 
    number_to_phone self.secondary_phone_number 
end 

def secondary_phone=(number) 
    self.secondary_phone_number = number.gsub(/\D/, '') 
end 

def fax 
    number_to_phone self.fax_phone_number 
end 

def fax=(number) 
    self.fax_phone_number = number.gsub(/\D/, '') 
end 

我使用Rails中的代碼作爲一種緩衝的數據庫之間,這是存儲數作爲整數,而這是他們輸入查詢字符串作爲用戶的形式。

+1

看起來你需要定義一個自定義數據類型。我在ActiveRecord中沒有這樣做,我假設你正在使用你的數據模型? –

+0

是的,我正在使用ActiveRecord。你如何創建自定義數據類型?知道任何好的鏈接,或者我在某處尋找某些文檔? –

+0

我GOOGLE了它,我不確定自定義數據類型是我正在尋找。這似乎是矯枉過正。我只想用一種特殊的格式來獲取和設置整數,其中一種已經被軌道支持。 –

回答

7

所有你需要的是,

before_save :sanitize_phone_number_fields 

def sanitize_phone_number_fields 
    [:primary_phone, :secondary_phone, :fax].each{|attr| self.send(attr).gsub!(/\D/, '')} 
end 
+0

輝煌,正是我所需要的!謝謝。 –

+0

在這裏使用'.each',而不是'.map'。你只是在迭代,而不是試圖創建一個新的數組版本。 – nzifnab

+0

我同意。感謝您指出了這一點 – usha