我觉得我在这里错过了一些非常简单的东西.所以我有认证会话,我基本上想加载当前的Shop对象来访问某些东西,比如电子邮件地址,shop_owner等.如何检索它以基本上获得此响应?
http://api.shopify.com/shop.html#show
Run Code Online (Sandbox Code Playgroud)
我试着查看/admin/shop.json并使用
ShopifyAPI::Shop.find(someidnumber)
Run Code Online (Sandbox Code Playgroud)
但没有去?
在我们的Rails 3.2.13应用程序(Heroku中的Ruby 2.0.0 + Postgres)中,我们经常从API中检索大量订单数据,然后我们需要更新或创建数据库中的每个订单,以及关联.单个订单创建/更新自身加上约.10-15个关联对象,我们一次最多导入500个订单.
下面的代码可行,但问题是它在速度方面根本没有效率.创建/更新500条记录大约需要 1分钟,生成6500多个db查询!
def add_details(shop, shopify_orders)
shopify_orders.each do |shopify_order|
order = Order.where(:order_id => shopify_order.id.to_s, :shop_id => shop.id).first_or_create
order.update_details(order,shopify_order,shop) #This calls update_attributes for the Order
ShippingLine.add_details(order, shopify_order.shipping_lines)
LineItem.add_details(order, shopify_order.line_items)
Taxline.add_details(order, shopify_order.tax_lines)
Fulfillment.add_details(order, shopify_order.fulfillments)
Note.add_details(order, shopify_order.note_attributes)
Discount.add_details(order, shopify_order.discount_codes)
billing_address = shopify_order.billing_address rescue nil
if !billing_address.blank?
BillingAddress.add_details(order, billing_address)
end
shipping_address = shopify_order.shipping_address rescue nil
if !shipping_address.blank?
ShippingAddress.add_details(order, shipping_address)
end
payment_details = shopify_order.payment_details rescue nil
if !payment_details.blank?
PaymentDetail.add_details(order, payment_details)
end
end
end
def update_details(order,shopify_order,shop)
order.update_attributes(
:order_name => shopify_order.name,
:order_created_at => …Run Code Online (Sandbox Code Playgroud) 我注意到在 Shopify API 文档中,他们提到可以使用“以逗号分隔的订单 ID 列表”作为名为“ids”的参数在一次调用中检索多个订单。
链接到我所指的文档部分:https : //docs.shopify.com/api/order#index
我多年来一直在使用 shopify_api gem,它基于 Rails ActiveResource。我目前将它与 Rails 3.2.13 一起使用,效果很好。
我知道如何检索单个记录:
# params[:id] = "123456789"
order = ShopifyAPI::Order.find(params[:id])
Run Code Online (Sandbox Code Playgroud)
或同时进行多条记录:
orders = ShopifyAPI::Order.find(:all, :params => {:limit => 250, :page => 2})
Run Code Online (Sandbox Code Playgroud)
但是,我似乎无法使用多个 ID 使其工作。任何想法我在这里做错了什么?
# params[:ids] = "123456789,987654321,675849301"
orders = ShopifyAPI::Order.find(:all, :params => {:ids => params[:ids]})
Run Code Online (Sandbox Code Playgroud)
哪个发出此 GET 请求: https://xxxxxx.myshopify.com:443/admin/orders.json?ids=123456789,987654321,675849301
却一无所获, orders = []
更新:
我还尝试了以下建议:
# params[:ids] = "123456789,987654321,675849301"
orders = ShopifyAPI::Order.find(params[:ids])
Run Code Online (Sandbox Code Playgroud)
哪个发出此 GET 请求: https://xxxxxx.myshopify.com:443/admin/orders/123456789,987654321,675849301.json
然而,这只返回第一个订单 123456789 …