2016-01-19 54 views
1

所以我有一個驗證邀請代碼Rails 4應用程序與設計。要用設計創建一個賬戶,用戶必須輸入驗證碼。它看起來像這樣:Rails downcase params的包含驗證?

class User < ActiveRecord::Base 
    validates :invite_code, inclusion: { 
    in: %w(foo347 bar362 foobarr100), 
    message: "Rails 4 app is invite only at this time, please sign up for a code." 
    } 

它的偉大工程,但我想讓它不區分大小寫所以fOo347或BaR362會工作。我試圖做一個before_save像這樣:

before_save { |user| user.name = user.name.downcase } 

每這裏 Simple way to always make a field lowercase in db的說明。

雖然它不工作,我認爲是因爲它是一個驗證。我也嘗試換before_save換取before_create,但沒有運氣。我怎樣才能在領域驗證之前降低領域?

回答

2

您應該使用before_validation回調,而不是:

before_validation { self.user.name = self.user.name.downcase } 
+1

小心 '' .downcase!返回零,這可能是意想不到的! –

+0

@HieuPham你絕對是對的!感謝您指出這一點,我編輯了答案。 – taglia

0

你怎麼樣downcase在控制器的PARAMS?

,或者您可以使用之前validation callback像taglia提出

+0

我會在控制器中做到這一點,但由於我使用Devise,控制器中沒有創建動作。驗證回調工作! – ChiefRockaChris

+0

你在設計控制器中沒有創建動作嗎?你可以覆蓋[設計控制器](https://github.com/plataformatec/devise#configuring-controllers)如果你想 –