Two has_many association for a single model


#1

Hi

I have following models

  1. employee

  2. transaction

Requirement - A transaction has a dealer(employee) and a
driver(employee).

I experimented following

I have put -

/models/employee.rb :

has_many :transactions, :as => :dealer
has_many :transactions, :as => :driver

/models/transaction.rb :

belongs_to :dealer, :class => :employee, :foreign_key => :employee_id
belongs_to :driver, :class => :employee, :foreign_key => :employee_id

Transaction table has columns - dealer_id, driver_id,

Now the problem is how can I get something like @transaction.dealer.name
or
employee.transactions


I certainly know that my experiment has basic flaws of understanding
associations.

Please help me!


#2

Thanks, that was a great help. Also tip of ‘transaction’ naming was very
useful one. Thanks again!


#3

On 25 Jan 2009, at 04:09, Sachin K. wrote:

driver(employee).

I experimented following

I have put -

/models/employee.rb :

has_many :transactions, :as => :dealer
has_many :transactions, :as => :driver

you’re misusing :as here - that’s for something completely different

/models/transaction.rb :

belongs_to :dealer, :class => :employee, :foreign_key => :employee_id
belongs_to :driver, :class => :employee, :foreign_key => :employee_id

Transaction table has columns - dealer_id, driver_id,

If that’s the case then the :foreign_key option should be ‘dealer_id’
and ‘driver_id’ (and thus unnecessary as that’s the default).
The :class option is also supposed to be :class_name
I’ve got an example of something similar here:
http://www.spacevatican.org/2008/5/6/creating-multiple-associations-with-the-same-table
Lastly, be wary of associations called transaction before Rails 2.3 -
the transaction method created by the association will stomp on an
internal method

Fred