How to handle cardinality 1-to-2 with Associations ?


I am new to RoR and am coding a small budgetting app with two tables (see below). As you can see every account has_many transactions and every transaction has 2 accounts. How can I best respresent this using ActiveRecord::Associations ?

create table accounts (   id int not null auto_increment,   name varchar(100) not null default '',   primary key(id) );

create table transactions (     id int not null auto_increment,     month varchar(3) not null,     amount int null,     from_id int not null,     to_id int not null,     constraint fk_from_accounts foreign key (from_id) references accounts(id),     constraint fk_to_accounts foreign key (to_id) references accounts(id),     primary key(id) ) engine=InnoDB;

I see 3 possible solutions but nothing elegant: - create 2 relationship tables (from and to) - use sql - code belongs_to_2 association

I would very much like your advice on this.

Thanks ! Simon

Hi Simon,

I think you need to model two relationships.

class Transaction < AR::Base   belongs_to :creditor, :class_name => 'Account', :foreign_key => 'creditor_id' #from_id   belongs_to :debitor, :class_name => 'Account', :foreign_key => 'debitor_id' #to_id end

class Account < AR:Base   has_many :credits, :class_name => 'Transaction', :foreign_key => 'creditor_id' #from_id   has_many :debits, : class_name => 'Transaction', :foreign_key => 'debitor_id' #to_id end


That certainly works. You can also put in a validation for the transaction and the account classes to limit the number of associations between them if you want to treat all associations uniformly.


Thanks you Steve, that is exactly what I was looking for. (I got so close but couldn't figure it out :slight_smile: ).