Noob: Weird Association Question

Ok, so I’ve been trying to make this thing work for a couple of days now
without luck. I am just tarting to think that what I want to do is not
possible. The associations that I am trying to describe are:

has_many :groups
has_many :users
belongs_to :admin, :class_name => “User”
belongs_to :default_group, :class_name => “Group”

validates_presence_of :company_name, :max_users, :email

after_create :create_default_admin_and_group

belongs_to :account
belongs_to :role
has_and_belongs_to_many :groups

validates_presence_of :first_name

before_create :account_max_users?
before_validation :generate_node_token, :if => “node_token.blank?”
before_validation :ensure_authentication_token, :if =>

before_destroy :is_group_admin?
before_destroy :is_account_admin?

has_many :users

validates_presence_of :name
validates_uniqueness_of :name

belongs_to :admin, :class_name => “User”
belongs_to :account
has_and_belongs_to_many :users

validates_presence_of :name
validates_uniqueness_of :name, :scope => :account_id

The most complicated association is the one between Account and Users,
Account and Groups. The thing is that an Account has many users and
(each of them has account_id attribute), but at the same time, and
belongs to an User (which is the admin of the account) and belongs to a
Group (which is the default group of the account).

Right now, what I’m trying to do is to create an Account, so that will
the create_default_admin_and_group method which is basically something

def create_default_admin_and_group
role = Role.find_or_create_by_name(“Admin”)

admin = self.create_admin(:ebmail      => email,
                          :first_name => company_name,
                          :password   => generate_random_password,
                          :role       => role)

self.build_default_group(:name   => company_name,
                         :admin  => admin)


It should create an “Admin” role if it doesn’t exist yet and then create
admin (User class) of the account. Before creating the admin the
account_max_users method is executed in order to know if we can add more
users to the account. The problem comes here:

def account_max_users?

This method should call the max_users? method from the Account model
is something like:

def max_users?
self.users.count == self.max_users

where max_users is an attribute of an account, but for some weird reason
self.account is nil in the account_max_users? method. It looks like the
following code:

admin = self.create_admin(:email => email,
:first_name => company_name,
:password => generate_random_password,
:role => role)

doesn’t seem to set role_id and account_id correctly. I’ve checked that
printing out the object just before “!self.account.max_users?” is
and this is the result:

#User:0x00000103ce97e0 {
:id => nil,
:email => “[email protected]”,
:encrypted_password =>
:password_salt => “$2a$10$KjaFu/fTqajr/f650oJ/q.”,
:reset_password_token => nil,
:remember_token => nil,
:remember_created_at => nil,
:sign_in_count => 0,
:current_sign_in_at => nil,
:last_sign_in_at => nil,
:current_sign_in_ip => nil,
:last_sign_in_ip => nil,
:authentication_token => “XYxHY0eC8GHJg-pbp3CB”,
:created_at => nil,
:updated_at => nil,
:node_token => “dd4f30ae8641d441bd666f03b4a653d6”,
:first_name => “Company-1”,
:last_name => nil,

  •          :account_id => nil,*
  •             :role_id => nil*


Is there any reason why this is happening? Are those associations
Am I doing something wrong?

Thanks in advance.

I’m using Rails 3.0.5 and Ruby 1.9.2-head. If you need any other
just tell me.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs