Hi all,

I found what I think is a slick solution to a problem of mine but I'd
like to know if there is a better way to accomplish what I did.

I have 2 tables:

Users:
  id
  category # can be either 'ADMIN', 'AUDITOR' or 'TENANT'

Audits:
  id
  auditor_id
  tenant_id

I need the audits to belong to both an AUDITOR and a TENANT user:

class User < ActiveRecord::Base
  has_many :audits
end

class Audit < ActiveRecord::Base
  belongs_to :user # !!! This does not work even using :class_name,
etc. !!!
end

After tinkering for a while with it I couldn't find an easy way of
making it work. Then I had an idea that has worked and I think is
pretty slick. I created 3 models:

class Admin < User
  # Admin specific functionality here
end

class Auditor < User
  has_many :audits
  # Auditor specific functionality here
end

class Tenant < User
  has_many :audits
  # Tenant specific functionality here
end

When a user is retrieved for access and functionality validations, I
re-retrieve the user through the specific user class as in:
  user = User.find(...)
  # The user is found and passes validations.
  # Now I re-retrieve it through the specific user class based in the
category value.
  user = user.category.capitalize.constantize.find(user.id) if user

>From that moment on I have the user retrieved through its correct type
and my associations work wonderfully.

Is there a better way of making this work?

Thanks.

Pepe
--~--~---------~--~----~------------~-------~--~----~
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