2014-06-16 8 views
2

나는 세 가지 모델두 모델 또는 다형성 연관에 속한 모델입니까?

  1. 사용자
  2. 제품 product의 다른 사용자 수 order 해당 제품을 제출 user
  3. 주문

있습니다.

이제 관리자로 내가 지불하는 다른 모델 payment을 구현하고 싶습니다.

질문 내가 user, orderpayment 사이 만들어야 협회의 종류에 대해 혼란 스러워요?

내가 현재 가지고있는 것입니다 :

class User < ActiveRecord::Base 

    has_many :products_selling, class_name: 'Product' 
    has_many :orders_received, class_name: 'Order', through: :products_selling, source: :orders 

    has_many :orders_made, class_name: 'Order' 
    has_many :products_ordering, class_name: 'Product', through: :orders_made, source: :product 

    has_one :payment, class_name: 'Payment', through: :orders_received 

app/models/user.rbapp/models/order.rb

class Order < ActiveRecord::Base 
    belongs_to :product 
    belongs_to :buyer, class_name: 'User', foreign_key: :user_id 
    has_one :seller, class_name: 'User', through: :product 

    has_one :payment, through: :seller 

app/models/payment.rb

class Payment < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :order 

에서 내가 사용되어야 하는지를 협회 확실하지 않다 , 나는 r이었다. 예를 들어 polymorphic: :true을 사용하는 예제가 있지만 모두 has_many인데, 내 경우에는 하나의 주문이 하나의 지불에 해당합니다. 본질적 것입니다, 당신은 single 테이블에 multiple 테이블을 연결하고 싶어한다면

enter image description here

:

답변

5

협회

Polymorphic associations는 기본적으로 여러 연결을 관리하기 위해 하나의 테이블을 사용할 수 있습니다 다른 데이터 형식과 연결할 수있는 pseudo 개체를 만듭니다.has_many/has_one에 관한 다형성 협회에 관해서

enter image description here

, 나는 완전히 확실하지 않다 : 우리는 일반적으로 등 images, errors, posts 등의 여러 모델에서 사용할 수있는 테이블, 예제와 함께 다형성 연결을 사용 (당신이 원한다면 나는 연구 할 수 있습니다)

-

수정

귀하의 경우에는

, 내가 이런 짓을 했을까 :

#app/models/user.rb 
class User < ActiveRecord::Base 

    has_many :orders 
    has_many :purchases, class_name: 'Order', foreign_key: "buyer_id" 

    has_many :products 
    has_many :bought, class_name: 'Product', through: :purchases 

end 

#app/models/order.rb 
class Order < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :product 
    has_one :payment 
end 

#app/models/payment.rb 
Class Payment < ActiveRecord::Base 
    #fields - id | user_id | order_id | created_at | updated_at 
    belongs_to :order #-> user pays for order 
    belongs_to :user #-> user making the payment 
end 

이것은 각 order에 대한 payments을 만들 수 있습니다 - 인 정말, 권리를 위해 무엇을 지불? (product이 아닌 order에 대해 지불해야합니다.)

+1

정답입니다. 'polymorphic' 연관성이이 시나리오에 적합하지 않은 것처럼 보입니다. 또한, 나는 바른 길 위에 있었던 것처럼 보인다. 질문을 명확하게하기 위해 (사용자가 답변을 변경하면 확실하지 않음), 사용자는 다른 사용자가 게시 한 제품을 구매합니다. 사용자가 주문하면 관리자의 계정으로 돈이 전송 된 다음이 관리자가 모든 판매자 (사용자)에게 돈을 송금합니다. 이 말을 듣고 'app/models/payment.rb'에 'belongs_to : user'가 필요합니다. 항상 판매자에게 지불하는 관리자가 하나이기 때문입니다. – Amey

관련 문제