0

일대일 일대일 연관성을 만들려고합니다. 기본적인 전제는 사용자의 두 계정 (아마도 지갑과 당좌 계좌 사이) 사이에서 돈을 추적하는 돈/거래 흐름 시스템입니다.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))

나는 다음에 어디로 가야할 지 정직하게 생각하고 있으므로 도움을 얻을 수 있습니다. 감사!

[편집 : 업데이트 된 모델 코드] 그 트랜잭션이 하나 개의 신용 계정과 하나 직불 계정의 소리에 의해

답변

0

늦어서 미안하지만 결국 알아 냈습니다. 여기 내 코드는

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

?

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 

문제가 해결되지 않으면, 당신은 해야 일 당신의 모델과 어떻게 관계에 좀 더 정보를 줄 수 있을까?

+0

이와 같은 1 대 1 협회를 사용하는 경우는 드뭅니다 ... 거래가 신용 계정에 속하고 DebitAccount에 속한다고 말하는 것이 정확합니다. 감사합니다. – bodacious

+0

감사합니다. 사실 내 코드가 조금 바뀌었고 댓글을 달았습니다. 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

+0

그것은 단지 생각하지 않는다.has_one을 사용하면 트랜잭션의 외래 키는 계정에 있지만 계정에는 많은 트랜잭션이있을 수 있습니다. – Robin