gpt4 book ai didi

ruby-on-rails - Spree Commerce - 按 sku 搜索订单

转载 作者:太空宇宙 更新时间:2023-11-03 17:52:05 26 4
gpt4 key购买 nike

我正在尝试在订单选项卡下的 Spree 后端创建一个搜索栏,您可以在其中输入产品 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 是 ransack 用来搜索 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: "test@email.com", 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">],

那么我想知道的是有没有办法将订单中包含的项目添加到返回的结果中?

最佳答案

订单与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 %>

得到你想要的。

关于ruby-on-rails - Spree Commerce - 按 sku 搜索订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22695386/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com