2011-06-26 8 views
5

Jak mogę wymagać, aby hasło miało minimalną długość podczas używania has_secure_password w Rails 3.1? Starałem się zrobić:has_secure_password: jak wymagać minimalnej długości

class User < ActiveRecord::Base 
    ... 
    validates :password, presence: { on: create }, length { minimum: 8 } 
    ... 
end 

ale wtedy walidacja nie powiedzie się z hasłem „za krótki” na aktualizację, gdy hasło nie jest przewidziane w params formularza. W przypadku innych atrybutów długość jest sprawdzana tylko wtedy, gdy podano wartość pola. Czy jest to błąd w implementacji has_secure_password, czy też robię coś nie tak?

Odpowiedz

4

Powinieneś zrobić coś takiego:

validates :password, presence: { on: create }, length { minimum: 8 }, :if => :password_changed? 
+1

Dzięki za podpowiedź. Myślę, że masz na myśli: validates: password, presence: {on: create}, length {minimum: 8, if: password_digest_changed? }. Gdybym zrobił: jeśli na końcu tak jak ty sugerujesz walidacje: obecność może nie być aktywna podczas tworzenia. Nie ma metody password_changed? ponieważ używam has_secure_password - odpowiednią metodą jest password_digest_changed ?. To jest błąd w Railsach 3.1.rc4, prawda? – Peder

+3

Cześć, dobra robota :) Nie sądzę, że to błąd, "hasło" w twoim przypadku wydaje się być atrybutem wirtualnym, a metody takie jak "zmieniono" istnieją tylko dla wierszy bazy danych – apneadiving

Powiązane problemy