Ich muss ein Feld namens phone_number in meiner rails3 App validieren. Dieses Feld ist optional, aber wenn ein Benutzer eine Telefonnummer eingibt, überprüfe ich das Format. Der RSpec2 Test läuft gut, aber wenn ich in die sign_up Ansicht gehe und das Feld phone_number nicht berühre, werde ich zu einem "Telefonnummer ist zu kurz (Minimum ist 6 Zeichen)" und "Telefonnummer ist ungültig" Fehler.Nur ein Rails3-Modell validieren, wenn ein Wert eingegeben wurde
Was ist das Problem in meinem Modell? Mein Ziel ist es, die Telefonnummer zu validieren, wenn ein Benutzer dies eingibt, wenn die Nummer leer ist, werde ich eine Null in meiner Datenbank speichern.
Das ist mein User-Modell:
class User < ActiveRecord::Base
belongs_to :address
accepts_nested_attributes_for :address
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable, :lockable and :timeoutable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :confirmable, :lockable, :validatable
# Setup accessible (or protected) attributes for your model
attr_readonly :username
attr_accessible :email, :password, :password_confirmation, :remember_me, :phone_number, :username, :newsletter, :address_attributes
validates :username, :presence => true, :uniqueness => true, :length => {:minimum => 4, :maximum => 16 }, :format => { :with => /\A[a-z0-9][a-z0-9._-]*\z/i }
validates :phone_number, :length => {:minimum => 6, :maximum => 25}, :format => { :with => /\A\S[0-9\+\/\(\)\s\-]*\z/i }, :allow_nil => true
validates :address, :presence => true
end
Meine Rspec Methode die phone_number zu testen:
it "should be valid without an phonenumber" do
Factory.build(:user, :phone_number => nil).should be_valid
end
it "should be invalid with an invalid phonenumber" do
invalid_phonenumbers.each do |invalid|
Factory.build(:user, :phone_number => invalid).should_not be_valid
end
end
it "should be valid with an valid phonenumber" do
valid_phonenumbers.each do |valid|
Factory.build(:user, :phone_number => valid).should be_valid
end
end
def invalid_phonenumbers
["Hans Wurst","+49 221 Hans","Gebe ich nicht ein"," ","110",""]
end
def valid_phonenumbers
["+492203969534","0221/549534","0800-2222 800","+49-0221-2222-390","+49 (221)/549534 - 23","+49 (0) 221/549534 - 23","0221269534"]
end
Thx das funktioniert mit der Aussicht. Aber in meiner rspec ist die Telefonnummer "" gültig. Ich habe keinen leeren Stich in meiner Datenbank – ThreeFingerMark
Wie ist es: present => false –
: Präsenz => false löst eine Ausnahme aus. – Abdo