Re: Associations - Better solution?

Älphä Blüë
2009-07-12T15:14:08Z

> Users:
>   id
>   category # can be either ''ADMIN'',
''AUDITOR'' or ''TENANT''
>
> Audits:
>   id
>   auditor_id
>   tenant_id
>

Looking at this original Table format you have two foreign_keys in
auditor and tenant.

auditor_id matches user.id
tenant_id matches user.id
admin_id matches user.id

> class User < ActiveRecord::Base
>   has_many :audits
> end

You can design your User table and use self-referential associations
within a given model.

class User < ActiveRecord::Base
  has_many  :audits
  has_many  :auditors,  :through => :audits
  has_many  :tenants,   :through => :audits
end

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

class Audit < ActiveRecord::Base
  belongs_to  :user
  belongs_to  :auditor, :class_name => "User"
  belongs_to  :tenant, :class_name => "User"
end

Using this format you can define any method in your Audit model with
something similar to:

:joins => [:user, :auditor, :tenant]

.. which will join those self-referential tables together

And then in your controller if you use:

@audits = Audit.all :include => [:user, :auditor, :tenant]

In your view you can do:

@audits.each do |audit|
  audit.auditor.category
  audit.tenant.category
  audit.user.category

Notice that the above example basically will find out the category for
each listing based on the foreign_key ids assigned through the
associations.

I only show this to you because it allows you to use multiple
foreign_keys within one table and can help you rethink the design of
your tables/models depending on the use.

I hope this gives you a little bit of an idea..




--
Posted via http://www.ruby-forum.com/.