2014-03-27 67 views
1

我試圖在訂單標籤下的Spree後端創建搜索欄,您可以在其中輸入產品sku並查找包含該產品的所有訂單。Spree Commerce - 通過sku搜索訂單

我已經使用deface插入「sku搜索」字段。代碼如下所示:

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,它應該回來的結果,但它沒有。以下是結果返回的結果。

#<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 

這是偉大的。現在我需要通過一個LINE_ITEM而不是按順序找到的東西:

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找到的東西:

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搜索,我要搜索通過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

請問[請幫忙](https://groups.google.com/forum/#!searchin/spree-user/filter$20result$20spree/spree-user/pFa9j4_yTa8/uEfnvvJPHuIJ)? –