Ruby on Rails - ассоциация типа «многие к одному» - PullRequest
0 голосов
/ 07 декабря 2011

Я пытаюсь создать какую-то ассоциацию «многие к одному».Основным условием является система денежных потоков / транзакций, позволяющая отслеживать деньги между двумя учетными записями пользователя (возможно, между кошельком и текущим счетом).

У меня есть модель транзакции, в которой хранится основная информация - чтоучетная запись для дебетования, какая учетная запись для зачисления, какая сумма.

У меня также есть модель учетной записи, из которой пользователь может создать несколько (например, один для кошелька, один для кредитной карты, один дляСчет чеков и т. Д.).

Проблема, с которой я столкнулся, заключается в том, что моя модель транзакций ссылается на модель аккаунта дважды , один раз для credit_id и один раз для debit_id.

Я пытаюсь выяснить, какая ассоциация мне нужна, и я думаю, что мне нужно много-к-одному (много транзакций, одна учетная запись).Я не думаю, что мне нужна таблица соединений, но я не совсем уверен.

Вот мой основной код модели, я действительно не уверен, куда идти дальше.

class Transaction < ActiveRecord::Base
  attr_accessible :amount, :description, :credit_id, :debit_id

  belongs_to :user

  belongs_to :debit, :class_name => "Account"
  belongs_to :credit, :class_name => "Account"


end

А затем для модели Account:

class Account < ActiveRecord::Base
  attr_accessible :name, :credit_transactions, :debit_transactions

  belongs_to :user

  has_many :transactions
  has_many :credit_transactions, :through => :transactions, :source => :credit
  has_many :debit_transactions, :through => :transactions, :source => :debit
end

С этой реализацией модели я могу правильно получить транзакции. Зачет и транзакцию, но при попытке сделать что-то вроде счета.credit_transactions, я получаю эту ошибку:

ActiveRecord :: StatementInvalid: SQLite3 :: SQLException: нет такого столбца: Transactions.account_id: ВЫБРАТЬ «account». * FROM «account» INNER JOIN «транзакции» ON"account" .id = "транзакции" .debit_id WHERE (("транзакции" .account_id = 3))

Я, честно говоря, немного застрял в том, куда идти дальше, поэтому любая помощь будет оценена,Спасибо!

[редактировать: обновленные коды моделей]

Ответы [ 2 ]

0 голосов
/ 03 января 2012

Извините за задержку, но, наконец, разобрался. Вот мой код

    class Transaction < ActiveRecord::Base
      attr_accessible :amount, :description, :long_description, :credited_id, :debitted_id, :custom_credit, :custom_debit

      belongs_to :user

      belongs_to :debitted, :class_name => "Account"
      belongs_to :credited, :class_name => "Account"

и для учетной записи

    class Account < ActiveRecord::Base
      attr_accessible :name, :debit_shorthand, :credit_shorthand, :credit_transactions, :debit_transactions

      belongs_to :user

      has_many :credit_transactions, :class_name => "Transaction", :foreign_key => 'credited_id'
      has_many :debit_transactions, :class_name => "Transaction", :foreign_key => 'debitted_id'

Спасибо всем, кто помог!

0 голосов
/ 07 декабря 2011

Судя по всему, в вашей транзакции один кредитный счет и один дебетовый?

class Transaction < ActiveRecord::Base

  has_one :credit_account, :class_name => "Account", :foreign_key => "credit_account_id"
  has_one :debit_account, :class_name => "Account", :foreign_key => "debit_account_id"

end

ЕСЛИ это не работает, не могли бы вы дать немного больше информации о том, как должны работать отношения между вашими моделями ?

...