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

Ruby on rails Spree Commerce-按sku搜索订单,ruby-on-rails,ruby,json,spree,ransack,Ruby On Rails,Ruby,Json,Spree,Ransack,我正在尝试在Spree后端的“订单”选项卡下创建一个搜索栏,您可以在其中输入产品sku并查找包含该产品的所有订单 我使用deface插入了按sku搜索字段。代码如下所示: Deface::Override.new(:virtual_path => 'spree/admin/orders/index', :name => 'search_by_sku', :insert_bottom => "div.omega"

我正在尝试在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>
                 ")
行\u items\u 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的属性 那么,让我们看看搜索的方法

首先,我可以通过对订单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_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
现在,我想通过变量_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 %>

获得您想要的。

订单和SKU之间的关系如下:

订单有许多行项目 行项目属于变体 变体有一个名为SKU的属性 那么,让我们看看搜索的方法

首先,我可以通过对订单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_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
现在,我想通过变量_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 %>

得到你想要的。

你就是那个男人!这正是我需要的。非常感谢。你能帮忙吗?你就是那个人!这正是我需要的。非常感谢。你能帮忙吗?