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