validations and hashes

Rails 3.1 and I'm working through activeldap which is not exactly ActiveRecord

class Group < ActiveLdap::Base
  def validate
    errors.add(:base, "You must enter a value for the 'Common name'") unless self.cn.to_s != ''
    errors.add(:base, "You must enter a value for the 'GID Number'") unless self.gidNumber.to_s != ''
    errors.add(:base, "You must enter a value for the 'Description'") unless self.description.to_s != ''
    errors.add(:base, "You must enter a value for the 'sambaGroupType'") unless self["objectclass"].include? "sambaGroupMapping"
    return errors
  end

irb(main):014:0> @group = Group.new
=> #<Group objectClass:<top, posixGroup>, must:<cn, gidNumber, objectClass>, may:<description, memberUid, userPassword>, cn: [], commonName: [], description: [], gidNumber: [], memberUid: [], objectClass: ["top", "PosixGroup"], userPassword: []>

irb(main):015:0> @group.validate
=> #<ActiveModel::Errors:0xa4b706c @base=#<Group objectClass:<top, posixGroup>, must:<cn, gidNumber, objectClass>, may:<description, memberUid, userPassword>, cn: [], commonName: [], description: [], gidNumber: [], memberUid: [], objectClass: ["top", "PosixGroup"], userPassword: []>, @messages=#<OrderedHash {:base=>["You must enter a value for the 'Common name'", "You must enter a value for the 'GID Number'", "You must enter a value for the 'Description'", "You must enter a value for the 'sambaGroupType'"]}>>

irb(main):016:0> @group.validate.messages.each do |a|
irb(main):017:1* puts a
irb(main):018:1> end
base
You must enter a value for the 'Common name'
You must enter a value for the 'GID Number'
You must enter a value for the 'Description'
You must enter a value for the 'sambaGroupType'
You must enter a value for the 'Common name'
You must enter a value for the 'GID Number'
You must enter a value for the 'Description'
You must enter a value for the 'sambaGroupType'

Or if I use my rails app instead and put @group.validate into flash hash, I also get duplication...

base You must enter a value for the 'Description' base You must enter a value for the 'Description'

(and I really would prefer to get the 'base' out of there altogether but can't seem to find a way to do that either)

Rails 3.1 and I'm working through activeldap which is not exactly ActiveRecord

class Group < ActiveLdap::Base
def validate
errors.add(:base, "You must enter a value for the 'Common name'") unless self.cn.to_s != ''
errors.add(:base, "You must enter a value for the 'GID Number'") unless self.gidNumber.to_s != ''
errors.add(:base, "You must enter a value for the 'Description'") unless self.description.to_s != ''
errors.add(:base, "You must enter a value for the 'sambaGroupType'") unless self["objectclass"].include? "sambaGroupMapping"
return errors
end

Everytime validate is called you're adding errors, nothing is
resetting errors so it stands to reason that you're going to get
duplicate (or triplicate if validate was called again etc) error
messages.
Given that activeldap seems to be using active model for its
validations stuff it's going to be very close to active record, so you
shouldn't be calling validate directly - call group.valid? to see if
the object is valid and if it isn't look at group.errors

Fred

Rails 3.1 and I'm working through activeldap which is not exactly ActiveRecord

class Group < ActiveLdap::Base
  def validate
    errors.add(:base, "You must enter a value for the 'Common name'") unless self.cn.to_s != ''
    errors.add(:base, "You must enter a value for the 'GID Number'") unless self.gidNumber.to_s != ''
    errors.add(:base, "You must enter a value for the 'Description'") unless self.description.to_s != ''
    errors.add(:base, "You must enter a value for the 'sambaGroupType'") unless self["objectclass"].include? "sambaGroupMapping"
    return errors
  end

Everytime validate is called you're adding errors, nothing is
resetting errors so it stands to reason that you're going to get
duplicate (or triplicate if validate was called again etc) error
messages.
Given that activeldap seems to be using active model for its
validations stuff it's going to be very close to active record, so you
shouldn't be calling validate directly - call group.valid? to see if
the object is valid and if it isn't look at group.errors