Hi,

I have pretty generic user/role models linked through an Authorization model
using has_many :through => ...  but I'm having difficulty getting it to work
the way I expect it to. When I instantiate a new role I can see it's
attributes via to_yaml(), but when I call it's name() method I get nil. I'm
baffled; below is a short code snippet - can anyone see what the problem is?

class Authorization < ActiveRecord::Base
  belongs_to :user
  belongs_to :role
end

class Role < ActiveRecord::Base
  has_many :authorizations
  has_many :users, :through => :authorizations
  attr_accessor  :id, :name, :description
  DEFAULT = 4
end

class User < ActiveRecord::Base
  has_many :authorizations
  has_many :roles, :through => :authorizations
  attr_accessible :id, :sso_id, :first_name, :last_name, :email

  def self.get_or_create_from_sso_user(sso_user)
    user = self.find_by_sso_id(sso_user.id)
    if user
      return user
    else
      # Create user
      created_user = self.create(
        :sso_id   => sso_user.id,
        :first_name   => sso_user.first_name,
        :last_name    => sso_user.last_name,
        :email        => sso_user.email
      )
      Authorization.create! :user_id => created_user.id, :role_id =>
Role::DEFAULT
      created_user.reload
      created_user.save!
    end
  end

  def has_admin_role?
    self.roles.each do |role|
      puts role.to_yaml # see the output for this below
      puts role.name  # see the output for this below
      return true if role.name.eql? 'admin'
    end
    return false
  end

  def sso_user
    @sso_user ||= SSO::User.find(self.id)
  end
end

The output for the two puts() above gives me this:
-- begin --
--- !ruby/object:Role
attributes:
  name: requester
  updated_at:
  id: "4"
  description: Default role for all JGI users
  created_at:
attributes_cache: {}

nil
-- end --

I also seem to have a problem with the role class itself:

-- BEGIN CONSOLE --
>> role = Role.find_by_id(1)
=> #<Role id: 1, name: "admin", description: "Administrator (global
read/write privileges)", created_at: nil, updated_at: nil>
>> role.name
=> nil

--~--~---------~--~----~------------~-------~--~----~
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 [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to