适用于特定商店的Spree Products API - spree-multi-domain

时间:2015-09-08 06:23:54

标签: ruby-on-rails api ruby-on-rails-4 e-commerce spree

我有一个Spree应用程序,支持spree-multi-domain扩展。在这里,他们是不同的商店,分配了不同的产品。(在管理员面板中)

对于STORE 1域而言, store1.example.com ,对于STORE 2 - > store2.example.com

这里我为多个商店设置了通配符子域

  

*.example.com

好的,现在,当我拨打example.com/api/products.json?token=MY_TOKEN_ID时,

我获得了JSON格式的完整产品列表。但 在这里,我通过api调用检索商店1和商店2的产品时遇到问题。

当我将products.json称为

存储1 store1.example.com/api/products.json?token=MY_TOKEN_ID

存储2 store2.example.com/api/products.json?token=MY_TOKEN_ID

然后我像往常一样example.com/api/products.json?token=MY_TOKEN_ID

获得完整的产品列表

我在这里期待的是,当我调用特定商店的产品的GET请求时,我应该获得在管理面板中分配的特定商店的产品。

那我该怎么办,无法理解。

请帮忙??

1 个答案:

答案 0 :(得分:1)

spree-multi-gem并非100%稳定且仍处于开发阶段。

您需要覆盖API并为每个请求使用current_store。

  

新的ControllerHelpers :: Store关注提供了一个current_store帮助程序,用于根据请求的域获取帮助程序。

只是一个例子,与api无关

创建 /app/controllers/spree/taxons_controller_decorator.rb 并扩展TaxonsController。你需要class_eval它,否则你覆盖完整的类!!

Spree::TaxonsController.class_eval do
   def show
    @taxon = Spree::Taxon.find_by_store_id_and_permalink!(current_store.id, params[:id])
    return unless @taxon

    @searcher = build_searcher(params.merge(:taxon => @taxon.id))
    @products = @searcher.retrieve_products
    @taxonomies = get_taxonomies
  end
end

因此,Spree :: TaxonsController中的所有其他函数保持不变,只显示show方法

所以对于你的情况:这是原始文件

https://github.com/spree/spree/blob/master/api/app/controllers/spree/api/v1/products_controller.rb

所以你需要进入你的rails应用程序,并在你去的地方有一个 /app/controllers/spree/api/v1/products_controller_decorator.rb (我认为有效)

Spree::Api::V1::ProductsController.class_eval do

end

但在阅读之后,我认为最好的想法是覆盖 https://github.com/spree/spree/blob/715d4439f4f02a1d75b8adac74b77dd445b61908/api/app/controllers/spree/api/base_controller.rb#L132

第132行product_scope: - )

这应该对你有帮助 - 如果不是你最好去magento:P

欢呼声