views:

20

answers:

1

I have a User model, and use an acts_as_authentic (from authlogic) on it. My User model have 3 validations on username and looks as following:

User < ActiveRecord::Base

  acts_as_authentic

  validates_presence_of   :username    
  validates_length_of     :username, :within => 4..40 
  validates_uniqueness_of :username

end

I'm writing a test to see my validations in action. Somehow, I get 2 errors instead of one when validating a uniqueness of a name. To see excess error, I do the following test:

describe User do
  before(:each) do
    @user = Factory.build(:user)
  end

  it "should have a username longer then 3 symbols" do
    @user2 = Factory(:user)
    @user.username = @user2.username
    @user.save

    puts @user.errors.inspect
  end
end

I got 2 errors on username: @errors={"username"=>["has already been taken", "has already been taken"]}.

Another case of problem is when I set username to nil. Somehow I get four validation errors instead of three: @errors={"username"=>["is too short (minimum is 3 characters)", "should use only letters, numbers, spaces, and .-_@ please.", "can't be blank", "is too short (minimum is 4 characters)"]}

I think authlogic is one that causes this strange behaviour. But I can't even imagine on how to solve that. Any ideas?

A: 

I think this is because authlogic has some build in validations and both them and your validations are run.

Google seems to give some answers to this topic. This one is for example for password field.

klew