Сопоставить несколько столбцов с одной таблицей - PullRequest
0 голосов
/ 16 декабря 2011

Представьте себе простое приложение I-O-U, в котором есть модель User и модель Transaction.

Таблица User имеет следующие столбцы:

  • ID
  • имя

Таблица Transaction имеет следующие столбцы:

  • lender_id (внешний ключ для User.id)
  • заемщик_ид (внешний ключ к User.id)
  • дата

Пользователь может одолжить или одолжить другому пользователю, который существует в таблице User.

Примером будет:

User:

 id | name
-------------
  1 | name A
  2 | name B
  3 | name C

Transaction:

 lender_id | borrower_id |  date
----------------------------------
     1     |     2       |  date1
     1     |     3       |  date2
     3     |     2       |  date3

Как бы я реализовал ассоциации в модельных классах?

1 Ответ

2 голосов
/ 16 декабря 2011

В транзакции:

belongs_to :lender, :class_name => "User"
belongs_to :borrower, :class_name => "User"

На пользователя:

has_many :loans, :class_name => "Transaction", :foreign_key => "lender_id"
has_many :debts, :class_name => "Transaction", :foreign_key => "borrower_id"

Это дает вам:

u = User.first
u.loans # [transaction, transaction, ...]
u.debts # [transaction, transaction, ...]

И

t = Transaction.first
t.lender # User
t.borrower # User

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...