2013-07-10 6 views
2
나는 다음과 같은 관계를 가지고

에서 카트에 여러 항목을 추가동시에

누군가가 자신의 카트에 제품을 추가
Class CartItem 
belongs_to :cart 
belongs_to :product 

Class Product (<=> category) 
has_many :cart_items 


Class Cart 
has_many :cart_items 

, 그것은 cart.id 및 제품과 함께 CartItem 테이블에 선을 만듭니다. 신분증. 편집 페이지의 카트에 제품을 추가 할 수 있습니다. 작동합니다.

하지만 지금은 장바구니에 두 개 이상의 제품을 동시에 추가하거나 제거하고 싶습니다. 고객이 추가/제거하려는 번호를 입력 할 수있는 경우 입력 번호 필드가 필요합니다. 그러나, 편집 양식에서 "no number"속성이 없기 때문에 "number"(각 제품에 대해)라는 필드를 넣으면 오류가 분명하게 나올 것이기 때문에 나는 그것을 처리하지 못합니다. 아마도 "field_tag"를 추가해야하지만 어떻게 작동 할 수 있습니까? 미리 감사드립니다.

답변

5

나는 Spree이라는 레일스로 작성된 전자 상거래 보석으로 작업하고 있습니다. 다음은 그 문제를 어떻게 해결했는지 보여줍니다.

우리는 모델이 Variant, Product, OrderLineItem입니다. 이것들은 우리의 주문 시스템의 기초를 형성합니다. 변형은 제품의 "돌연변이"처럼 간주 될 수 있습니다. 빨강, 초록, 파랑으로 칠할 수있는 TShirt가 있다고 가정 해보십시오. 제품은 TShirt이며 색상은 변형입니다.

변형은 LineItem을 통해 주문에 연결됩니다. LineItem 개체는 variant_id, quantity 및 변형의 현재 가격을 저장합니다. 나중에 변경 될 경우를 대비하여 제공됩니다. 사용자가 예기치 않게 가격을 변경하는 것을 원하지 않습니다.

장바구니에 항목을 추가하는 논리는 단순히 제품 페이지에 variant_id와 수량 필드가있는 양식입니다. Here's Spree's version. 그 형태를 다루는 컨트롤러의 동작은 기본적으로 variant_id과 수량을 소요하고,이 수행합니다 주문이 이미

  • 주문이 존재하지 않는 경우가있는 경우

    1. 확인을 한
    2. 새를 작성 생성 수량 및 variant_id가 지정된 주문의 개별 항목을 선택하고 가격을 저장합니다.

    Spree의 부두는 인벤토리 수준 등을 신경 쓰는 것처럼 조금 복잡하지만 그 기본 요지입니다.

    사용자가 장바구니를 보러 갈 때 모든 광고 항목과 수량 숫자 입력란이있는 양식이 표시됩니다. 그 형태는 다음과 같습니다

    checkout http://f.cl.ly/items/3P3t3o1F283a1e0Z3e0C/Screen%20Shot%202013-07-11%20at%208.39.20%20AM.png

    코드를 해당 양식은 세 개의 파일에 생성하려면 다음의 필드에 orders/edit.html.erb, orders/_form.html.erborders/_line_item.html.erb

    OrdersController#update에 제출하여 작품을 형성하고, 때문에 양식이 중첩 된 속성 인 경우 전체 광고 주문과 광고 항목이 적절하게 업데이트됩니다.

    이 정보가 도움이 되었기를 바랍니다.

  • +0

    멋진 직장! 귀하의 답변에서 영감을 얻은 해결책을 찾았습니다. – Julien

    관련 문제