2015-09-08 4 views
2

У меня есть приложение Spree с поддержкой расширения spree-multi-domain. Здесь их различны магазин с различными продуктами, возложенных на него (в панели администратора)API продуктов 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. Но Здесь у меня проблема при получении продуктов для Store 1 и Store 2 через api call.

Когда я звоню 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

spree-multi-gem не стабилен на 100% и находится в стадии разработки.

вам необходимо переопределить API и использовать current_store для каждого запроса.

Новый контроллер ControlerHelpers :: Store вызывает помощника current_store для получения хелпера на основе домена запроса.

просто пример, не связанные с апи

создать /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 

так тем, что каждая другая функция от Шпрее :: TaxonsController остается, как это было, и только метод шоу был преодолен

так для Вашего случая: это оригинальная файл

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

так что вы должны пойти в приложение рельсы и имеют /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

ура

+0

Thank you @huan son. Теоретически понятно, что я должен переопределить API, но не знаю, как и где это сделать. Не могли бы вы предоставить мне какой-нибудь код или любой стартовый способ сделать это. И да, ваш ответ помог мне на следующий уровень. –

+0

это довольно легко. загляните в код spree, где находится api, и просто создайте этот файл (ы) в своей папке/приложении. рельсы смотрят извне внутрь, поэтому, если файл называется api_controller в драгоценном камне, сначала он загружается. если в вашем/app/api_controller есть еще один, это будет загружено. таким образом, как переопределить. с spree, вы делаете class_eval этого класса и просто переопределяете указанные вами методы. –

+0

Я добавил пример для контроллера classeval –

Смежные вопросы