2010-12-17 82 views
11

我想保存一個名稱到數據庫和一個單詞(名字)工作正常,但是當用戶輸入名字和姓氏我希望Rails將其保存到數據庫爲名字 - 姓氏而不是姓氏名字(之間的空格)。保存使用Rails 3之前用破折號替換空間

我知道我應該使用一個創建過濾器之前,但我不知道這需要如何。我想驗證工作,即沒有兩個人應該能夠使用相同的名稱。

我用Rails 3

回答

3

爲什麼你不只是在DB FIRST_NAME和LAST_NAME列,並創建自己的驗證規則,以確保該組合是唯一的(HTTP://guides.rubyonrails .ORG/active_record_validations_callbacks.html#創建定製驗證的方法)。您還應該在數據庫中的這兩列創建一個唯一的索引。

0

另一種選擇是對我們regexp並用所有現有空格替換。你會沿着以下幾條線:

self.firstname.gsub(/\s+/, '-') 

在你的模型。

注意:我不確定ruby是否接受\s作爲「任何空格字符」我認爲*應該確保如果某人輸入帶有兩個相鄰空格(或更多)的名稱,它將不會轉換每個空格成一個單獨的破折號,但只有一個。

+0

這種方式隔開所有字母以短劃線,不是每一個字...... – Ger 2012-05-25 12:42:51

+0

@Gearóid哦,你是對的!我的意思是輸入'+'而不是'*'!對於那個很抱歉。 = P – omninonsense 2012-06-02 12:41:01

28

您可以在字符串上使用ActiveSupport的偏轉器方法parameterize

name = 'john smith'  # => john smith 
name.parameterize  # => john-smith 

此外,參數化需要一個選項來使用的話,休息,這樣你就可以像這樣下劃線代替破折號:

name.parameterize("_") # => john_smith 

使用參數化的一個優點是,它規範了文字拉丁,所以......

name = "jöhanne såltveç" 
name.parameterize  # => johanne-saltvec