ruby-on-railsactiverecordactive-relation

multiple belongs_to relationships between two classes in Rails


I have a Transaction class. Each object of this class includes one issuing account, one sending account and one receiving account. Each of these is an instance of Account class. In my Transaction table, I have issuer_id, sender_id and receiver_id.

How should I specify relationship between Transaction and Account so that I can call

transaction.issuer
transaction.sender
transaction.receiver

Thank you.


Solution

  • Use :class_name to specify the class name, when it can't be guessed from the association name:

    class Transaction
      belongs_to :issuer,   :class_name => 'Account'
      belongs_to :sender,   :class_name => 'Account'
      belongs_to :receiver, :class_name => 'Account'
    end
    
    class Account
      has_many :issued_transactions,   :foreign_key => :issuer,   :class_name => 'Transaction'
      has_many :sent_transactions,     :foreign_key => :sender,   :class_name => 'Transaction'
      has_many :received_transactions, :foreign_key => :receiver, :class_name => 'Transaction'
    end
    

    You can read more in the documentation.