Простой вопрос об ассоциациях ActiveRecord - PullRequest
1 голос
/ 24 февраля 2009

Мое приложение имеет концепцию «Кредит». Каждый заем имеет кредитора, должника и сумму.

С точки зрения базы данных я знаю, что хочу, чтобы таблица ссуд выглядела примерно так:

|id|Amount|creditor_id|debtor_id|
| 1|   100|          5|        7|

Где идентификаторы кредиторов / должников ссылаются на идентификаторы пользователей (т.е. первичный ключ для строк в моей таблице пользователей).

У меня вопрос, как мне установить это в ActiveRecord. Я не могу сделать что-то вроде:

class Loan < ActiveRecord::Base
    has_one :creditor

Так как это заставит рельсы искать таблицу «кредиторов» (а все кредиторы хранятся в таблице пользователей).

Ответы [ 2 ]

4 голосов
/ 24 февраля 2009

Опция (естественно, хорошо документированная в Rdoc): class_name. Я считаю, что синтаксис:

has_one :creditor, :class_name => 'User'

Также вы можете добавить это в закладки:

http://api.rubyonrails.org/

Может сэкономить несколько минут в следующий раз.

0 голосов
/ 24 февраля 2009

Это не так просто, как кажется. Могут ли пользователи быть как кредиторами, так и должниками? Могут ли они иметь более одного кредита?

По сути, похоже, что вы хотите самореференциальную связь «многие ко многим». Вам нужна модель соединения, называемая заем, потому что у вас есть дополнительные данные в таблице соединений, поэтому вы должны использовать has-many: through. Вот хорошее сообщение в блоге о различиях между habtm и has-many: through.

Существует множество примеров того, как делать сложные вещи с вашими модельными отношениями. Имейте в виду, однако, что все необычные настройки модели не соответствуют примерам того, как затем настроить ваши контроллеры и представления. Похоже, что авторы учебного пособия избегают полных примеров отношений «многие ко многим» с контроллерами и представлениями, потому что это довольно сложно.

Удачи

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