validates_uniqueness_of problem

giorgio
Tue, 21 Sep 2010 21:35:18 -0000

I have an after_save callback when I save an Organisation record.

  def after_save
    #create an admin user for this organisation
    if self.users.size.zero?
      user=User.new(:organisation_id=>self.id,
      :first_name => "Admin",
      :last_name => "User",
      :logon_name => "admin",
      :password => "secret_password",
      :privilege_bits => 3,
      :active => 1  )
      user.save
    end
  end

The User table has "validate_uniqueness_of" which appears to create a
problem.

class User < BaseServiceTable
  before_validation_on_create :set_initial_password
  serialize :permitted_programmes , Array

  attr_accessor :password_confirmation

  validates_presence_of     :logon_name
  validates_uniqueness_of   :logon_name, :scope => :organisation_id
...........

Here is the sql from te dev log:
SQL (0.1ms)  BEGIN
Organisation Exists (0.3ms)  SELECT `organisations`.id FROM
`organisations` WHERE (`organisations`.`logon_name` = BINARY
''abcd'')
LIMIT 1
Organisation Create (0.3ms)  INSERT INTO `organisations` (`name`,
`logon_name`, `password`, `active`) VALUES(''ABcd Org'',
''abcd'',
''OrgPassword'', 1)
SQL (0.4ms)  SELECT count(*) AS count_all FROM `users` WHERE
(`users`.organisation_id = 12)
SQL (53.2ms)  ROLLBACK

Here is (top of) the stack trace:
NoMethodError (You have a nil object when you didn''t expect it!
The error occurred while evaluating nil.columns_hash):
    /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/
validations.rb:723:in `validates_uniqueness_of''
    /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/
validations.rb:400
    /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/
validations.rb:397:in `each''
    /usr/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/
validations.rb:397

I have had a look at the validation code and not sure what the problem
is. Not sure if it is because User inherits from an abstract table?

I am tempted just to do the validation manually as I dont have time
for lengthy messing around, but I just wondered if anyone had seen the
same problem?

Cheers
George

--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit this group at