我想保存一個名稱到數據庫和一個單詞(名字)工作正常,但是當用戶輸入名字和姓氏我希望Rails將其保存到數據庫爲名字 - 姓氏而不是姓氏名字(之間的空格)。保存使用Rails 3之前用破折號替換空間
我知道我應該使用一個創建過濾器之前,但我不知道這需要如何。我想驗證工作,即沒有兩個人應該能夠使用相同的名稱。
我用Rails 3
我想保存一個名稱到數據庫和一個單詞(名字)工作正常,但是當用戶輸入名字和姓氏我希望Rails將其保存到數據庫爲名字 - 姓氏而不是姓氏名字(之間的空格)。保存使用Rails 3之前用破折號替換空間
我知道我應該使用一個創建過濾器之前,但我不知道這需要如何。我想驗證工作,即沒有兩個人應該能夠使用相同的名稱。
我用Rails 3
爲什麼你不只是在DB FIRST_NAME和LAST_NAME列,並創建自己的驗證規則,以確保該組合是唯一的(HTTP://guides.rubyonrails .ORG/active_record_validations_callbacks.html#創建定製驗證的方法)。您還應該在數據庫中的這兩列創建一個唯一的索引。
另一種選擇是對我們regexp並用所有現有空格替換。你會沿着以下幾條線:
self.firstname.gsub(/\s+/, '-')
在你的模型。
注意:我不確定ruby是否接受\s
作爲「任何空格字符」我認爲*應該確保如果某人輸入帶有兩個相鄰空格(或更多)的名稱,它將不會轉換每個空格成一個單獨的破折號,但只有一個。
您可以在字符串上使用ActiveSupport的偏轉器方法parameterize
。
name = 'john smith' # => john smith
name.parameterize # => john-smith
此外,參數化需要一個選項來使用的話,休息,這樣你就可以像這樣下劃線代替破折號:
name.parameterize("_") # => john_smith
使用參數化的一個優點是,它規範了文字拉丁,所以......
name = "jöhanne såltveç"
name.parameterize # => johanne-saltvec
這種方式隔開所有字母以短劃線,不是每一個字...... – Ger 2012-05-25 12:42:51
@Gearóid哦,你是對的!我的意思是輸入'+'而不是'*'!對於那個很抱歉。 = P – omninonsense 2012-06-02 12:41:01