2017-10-22 3 views
0

레일 4를 사용하고 있는데 다음과 같은 3 가지 다 대 다 관계 상황이 있습니다. 판매를 등록하려면 수량과 함께 클라이언트와 제품이 필요합니다. 3 회분은 다른 테이블 할부로 인해 판매용 고정 된 ID가 필요할 때 제공됩니다. 각 분할 지불 일의 만기일과 값이 있으며 지불 여부를 확인해야합니다. 레일 4에 3 방향 다 대다 관계를 올바르게 구현하려면 어떻게해야합니까?

나는 그들 사이의 관계에 조금 혼란 있어요,하지만 난 (내가 SCP, sale_client_product 여기에 사용되는 중간 테이블이라고 함)이 같은 짓을 :

class Client < ActiveRecord::Base 
    has_many :scps 
end 

class Sale < ActiveRecord::Base 
    has_many :scps 
    has_many :installments 
end 

class Installment < ActiveRecord::Base 
    belongs_to :sale 
end 

class Product < ActiveRecord::Base 
    has_many :scps 
end 

class SCP < ActiveRecord::Base 
    belongs_to :client 
    belongs_to :product 
    belongs_to :sale 
end 

내가이 있는지 알고 싶습니다 올바른지 또는 더 나은 방법이 있는지 확인하십시오. 또한 하나의 판매에 대해 하나의 양식으로 많은 SCP 인스턴스를 저장해야 할 수도 있기 때문에 실제로 저축 할 때도 마찬가지입니다.

답변

1

당신은 ProductClient, Sale, 하나의 문서에 Installment 정보는, 어쩌면 당신이 Invoice를 사용하도록합니다. 각 단위에 대한

  • 제품 정보, 이름, 수량, 가격 : 회사가 고객으로부터 돈을 요구하려는 경우

    사업에서, 그는 정기적으로 그에게 다음의 모든 정보를 정기적으로 포함하는 invoice를 보내드립니다

  • 클라이언트 정보, 이름, 주소, 전화 번호
  • 판매 세부 사항을, 총 가격, 판매 또는 할부 기한의 날짜, 할부 금액

Payment


Class Client 
    has_many :invoices 
end 

Class Product 
    has_many :invoices 
end 

Class Sale 
    has_many :installments 
    has_many :invoices, through: :installments 
end 

Class Installment 
    belongs_to :sale 
end 

Class Invoice 
    belongs_to :client 
    belongs_to :product 
    belongs_to :installment 
end 
당신이 Invoices (결과적으로 Installments)이 지급 된 이해할 수 있도록, Invoice와 화해 필요한 것입니다. 당신이 @invoice.payment을 수행 할 때 @invoice.payment 다음 할부 지불되지 않은, nil 경우

Class Payment 
    belongs_to :invoice 
end 

당신은, 그 송장 (belongs_to :installment)에 대한 지불을받을. 당신이 Payment을 등록 할 경우

그것은해야이 내가 회계 분야에서 일하는 때 나는 회계 거래를 등록 할 방법의 일종이다 Invoice

@payment = Payment.new(payment_params) 
@payment.invoice_id = @invoice.id 
@payment.save 

기존. 언제든지 귀하의 응용 프로그램을 개선하고 미래에 우리는 개선을 위해이 게시물을 편집 할 수 있습니다

가능한 개선이 그 Installment has_one :payment, through: :invoice을 enstablishing 수 있습니다, 그래서 그것을 알아낼!

+0

도움 주셔서 감사합니다. 나는 그것이 어떻게 작동하는지 모르겠으므로 다형성 협회를 더 잘 이해해야한다. 내가 일할 때 나는 너에게로 돌아 간다. – onildo

+0

그냥 아이디어를 얻는다.이 송장을 패키지로 취급한다. 특정 판매 및 고객을위한 모든 제품을 포함합니까? 인보이스가 코드 현명한 것은 아닙니다. 예제 구현을 이해하는 데 문제가 있습니다. – onildo

+0

@onildo 네 말이 맞아. 내 솔루션이 완전하지 않아서 완전히 수정되었습니다. 한번 봐주세요. 감사 –