일대일 일대일 연관성을 만들려고합니다. 기본적인 전제는 사용자의 두 계정 (아마도 지갑과 당좌 계좌 사이) 사이에서 돈을 추적하는 돈/거래 흐름 시스템입니다.Ruby on Rails - 다 대일 타입 연결
나는 계좌 이체, 계좌 개설, 금액에 대한 기본 정보를 저장하는 거래 모델을 가지고 있습니다.
계정 모델도 있습니다. 사용자는 여러 계정을 만들 수 있습니다 (지갑, 신용 카드, 수표 계정 등).
제가 생각하기에 문제는 계정 모델 을 두 번, 두 번째는 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
다음 계정 모델
:이 모델 구현과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
, 나는 제대로 transaction.credit 및 transaction.debit를 얻을 수 있습니다,하지만 난 account.credit_transactions처럼 무언가를하려고 할 때, 나는 얻을 이 오류 :
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: transactions.account_id: SELECT "accounts".* FROM "accounts" INNER JOIN "transactions" ON "accounts".id = "transactions".debit_id WHERE (("transactions".account_id = 3))
나는 다음에 어디로 가야할 지 정직하게 생각하고 있으므로 도움을 얻을 수 있습니다. 감사!
[편집 : 업데이트 된 모델 코드] 그 트랜잭션이 하나 개의 신용 계정과 하나 직불 계정의 소리에 의해
이와 같은 1 대 1 협회를 사용하는 경우는 드뭅니다 ... 거래가 신용 계정에 속하고 DebitAccount에 속한다고 말하는 것이 정확합니다. 감사합니다. – bodacious
감사합니다. 사실 내 코드가 조금 바뀌었고 댓글을 달았습니다. transaction.credit 및 transaction.debit을 수행하려고하면 올바른 Account 모델을 얻을 수 있습니다. 그러나 나는 그 반대를 할 수 없다. 예 : account.credit_transactions 또는 account.debit_transactions. "ActiveRecord :: StatementInvalid : SQLite3 :: SQLException : 해당 열 없음 : transactions.account_id : SELECT"accounts ". * FROM"accounts "INNER JOIN"트랜잭션 "ON"계정 ".id ="transactions ".debit_id WHERE (("거래".account_id = 3)) "; 어떤 도움? 하하 – Josiah
그것은 단지 생각하지 않는다.has_one을 사용하면 트랜잭션의 외래 키는 계정에 있지만 계정에는 많은 트랜잭션이있을 수 있습니다. – Robin