2014-03-06 1 views
1

면책 조항 : 레일스를 처음 사용했습니다.레일에서이 DB 쿼리를 리팩토링 할 수있는 방법

난 할 노력하고있어이 긴 형태 :

user = Spree::User.find(2) 
cart = Spree::Order.where(state: "cart", user_id: user.id) 
line_item = Spree::LineItem.where(order_id: cart.last.id).map { |order| order.variant_id} 
variant = Spree::Variant.find(line_item).map { |order| order.product_id } 
Spree::Product.find(variant).map { |product| product.name } 

무엇 발생하면, 그것은 DB로 전환되는 사용자를 발견, 자신의 상태가 장바구니에있는 순서를 가져옵니다. 그런 다음 해당 광고 항목을 찾습니다. 제품이 포함되어 있는지 확인하기 위해 "변형"데이터를 찾으십시오. 그런 다음 제품 페이지에서 사용자 카트의 모든 제품을 알려줍니다.

이렇게보기가 엉망이고 가려집니다. 리팩토링하는 방법을 알지 못하고 질의를 많이하지 않을 것입니다.

+0

"많이 있습니다"라는 키워드가 어디 에나 나타나고 있습니다. 나는 이것에 주목할 것입니다 ... 나는 Spree가 루비에 대한 오픈 소스 전자 상거래 프레임 워크라고 언급 했어야합니다. – BenMorganIO

+0

어떤 Spree 버전을 사용하고 있습니까? Spree :: User ...에 대한 문서 및/또는 코드를 찾을 수 없습니다. – raviolicode

+0

아마 지금 사용자 정의 빌드로 작업 중이기 때문일 수 있습니다. – BenMorganIO

답변

1

Spree Order States을 보면 다른 주에서 여러 주문을 한 것이 아니라 하나의 특정 주에 한 주문 만있는 것은 아닙니다.

실제로는 Spree::User에 따라 다릅니다. Spree::User에 대한 문서 및/또는 출처를 찾을 수는 없지만 특정 LegacyUser을 언급합니다. 사용자 빌드가 있다고 언급 한 의견에는 Spree::User의 실제 코드를 확인하고 사용자가 하나 이상의 주문을 할 수 있는지, 그리고 이미 카트 상태를 선택하는 방법이 있는지 확인해야합니다. 그렇지

order = user.order 
order.variants.map(&:name) 

:

order = user.orders.where(state: "cart") 
order.variants.map(&:name) 

당신이 코드에서 사용자로부터 필요한 순서를 얻을 수있는 방법이있을 수

그래서 Spree::User 한 순서가있는 경우.

+0

을 사용해야 할 것입니다. "변형"이 무엇인지 명확히하십시오. 기본적으로 제품이 있습니다. 제품은 아마 tshirt입니다. 변형 상품은 제품에 속하며 그 tshirt의 다른 "변종"을 나열합니다 : 빨간색 tshirt, 녹색 tshirt, 파란색 tshirt, 당신은 아이디어를 얻습니다. 희망이 도움이됩니다. – BenMorganIO

+0

변경을 통해 진행할 것입니다. 위에서 아래로 시작합니다. 우리 모델에서는 사용자가 많은 주문을했다고 명시하지 않습니다. 여기에있는 것도 없습니다. 나는 그들을 추가 할 것이다. – BenMorganIO

+0

사용자가 속해야합니까? – BenMorganIO