2014-03-27 2 views
1

나는 제품 sku을 입력하고 해당 제품이 포함 된 모든 주문을 찾을 수있는 주문 탭에서 Spree의 백엔드에 검색 창을 만들려고합니다.Spree Commerce - sku로 주문 검색

"sku 검색"입력란에 deface를 삽입했습니다. 코드는 다음과 같습니다.

Deface::Override.new(:virtual_path => 'spree/admin/orders/index', 
       :name => 'search_by_sku', 
       :insert_bottom => "div.omega", 
       :text => " 
       <div class='field'> 
       <%= label_tag nil, Spree.t(:sku) %> 
       <%=f.text_field :line_items_cont %> 
       </div> 
       ") 

line_items_cont 오류가 발생했습니다.

line_items_cont는 결과에 표시되어야하는 line_items를 검색하기 위해 ransack이 사용하지만 실제로는 그렇지 않습니다. 결과는 다음과 같습니다.

#<Spree::Order id: 225400, number: "R454575501", 
item_total: #<BigDecimal:7f83f7815998,'0.3194E3',18(18)>, 
total: #<BigDecimal:7f83f78158f8,'0.3194E3',18(18)>, 
state: "complete", adjustment_total: #<BigDecimal:7f83f7815808,'0.0',9(18)>, 
user_id: nil, completed_at: "2014-01-30 07:34:38", bill_address_id: 173224, 
ship_address_id: 171925, payment_total: #<BigDecimal:7f83f7815560,'0.3194E3',18(18)>, 
shipping_method_id: nil, shipment_state: "shipped", payment_state: "paid", 
email: "[email protected]", special_instructions: "", created_at: "2014-01-30 05:00:49", 
updated_at: "2014-01-30 16:12:31", currency: "USD", last_ip_address: "removed", 
yahoo_order_id: nil, legacy_fields: {}, legacy_order_id: nil, created_by_id: nil, 
channel: "spree", approved_at: "2014-01-30 14:27:10">], 

그래서 궁금한 점은 주문에 포함 된 항목을 반환 된 결과에 추가하는 것입니까?

답변

3

다음과 같이 주문 및 SKU의 사이의 관계는 다음과 같습니다

  • 주문이
  • 라인 항목이 변종에 속하는 많은 라인 항목이
  • 변종
SKU라는 속성이 있습니다

그래서 검색 방법을 살펴보십시오.

먼저 나는 ORDER_ID에 대한 간단한 검색을 사용하여 주문을 찾을 수 있습니다 : 위대한

sandbox » Spree::Order.search(id_eq: 1).result.first.id 
    (0.1ms) SELECT COUNT(*) FROM "spree_orders" WHERE "spree_orders"."id" = 1 
=> 1 

합니다.

sandbox » Spree::Order.search(line_items_variant_id_eq: 1).result.first.id 
    Spree::Order Load (0.5ms) SELECT "spree_orders".* FROM "spree_orders" LEFT OUTER JOIN "spree_line_items" ON "spree_line_items"."order_id" = "spree_orders"."id" WHERE "spree_line_items"."variant_id" = 1 ORDER BY "spree_orders"."id" ASC LIMIT 1 
=> 1 

하지만 그 대신 variant_id으로 검색, 나는 검색 할을 :

sandbox » Spree::Order.search(line_items_id_eq: 1).result.first.id 
    Spree::Order Load (0.5ms) SELECT "spree_orders".* FROM "spree_orders" LEFT OUTER JOIN "spree_line_items" ON "spree_line_items"."order_id" = "spree_orders"."id" WHERE "spree_line_items"."id" = 1 ORDER BY "spree_orders"."id" ASC LIMIT 1 
=> 1 

지금 나는 variant_id으로 뭔가를 찾으려면 : 지금은 LINE_ITEM에 의해 대신의 명령에 의해 뭔가를 찾을 필요 SKU로 : 그래서

Spree::Order.search(line_items_variant_sku_eq: "ROR-00011").result.first.id 
    Spree::Order Load (0.5ms) SELECT "spree_orders".* FROM "spree_orders" LEFT OUTER JOIN "spree_line_items" ON "spree_line_items"."order_id" = "spree_orders"."id" LEFT OUTER JOIN "spree_variants" ON "spree_variants"."id" = "spree_line_items"."variant_id" AND "spree_variants"."deleted_at" IS NULL WHERE "spree_variants"."sku" = 'ROR-00011' ORDER BY "spree_orders"."id" ASC LIMIT 1 
=> 1 

, 당신은 아마 사용할 수 있습니다

<%= f.text_field :line_items_variant_sku_eq %> 

원하는 것을 얻으십시오.

+0

너는 남자 야! 그게 내가 필요한 것입니다. 정말 고마워. – user2985714

+0

[this on] (https://groups.google.com/forum/#!searchin/spree-user/filter$20result$20spree/spree-user/pFa9j4_yTa8/uEfnvvJPHuIJ)에서 도와 주시겠습니까? –