2015-10-02 32 views
5

Mam aplikację Shopify, która uruchamia wywołanie zwrotne po utworzeniu nowego sklepu. Właśnie odkryłem błąd, który powodował, że po odinstalowaniu aplikacji, a następnie ponownym jej uruchomieniu, wywołanie zwrotne nie zostało uruchomione, ponieważ sklep nie został ponownie utworzony (nie usuwam sklepów z mojej bazy danych podczas odinstalowywania).Shopify Rails App: wyzwalanie Utwórz oddzwonienie do ponownego zainstalowania sklepu

class Shop < ActiveRecord::Base 
    include ShopifyApp::Shop 
    after_create :init_webhooks 

    def self.store(session) 
    shop = Shop.where(:shopify_domain => session.url).first_or_create({ shopify_domain: session.url, 
             :shopify_token => session.token, 
             :installed => true}) 
    shop.id 
    end 

    def self.retrieve(id) 
    shop = Shop.where(:id => id).first 
    if shop 
     ShopifyAPI::Session.new(shop.shopify_domain, shop.shopify_token) 
    else 
     nil 
    end 
    end 

Mogę uruchomić kontrolę, aby sprawdzić, czy shop.installed = false, a następnie, jeśli jest to fałsz, mogę init_webhooks. Ale nie jestem pewna, gdzie powinienem umieścić tę logikę. Nie wiem, czy warto umieścić w sklepie lub pobrać metody.

Zastanawiam się, czy jest coś prostego, czego mi brakuje. Zasadniczo chcę uruchomić moje init_webhooks, jeśli webhooks nie istnieją.

EDIT: Próbowałem poniżej rozwiązanie refactoring moje zwrotnych do własnego sposobu czym mogę sprawdzić, czy jest zainstalowana aplikacja, a następnie, jeśli nie, uruchom Metody chcę na nowych instalacjach:

def self.retrieve(id) 
    shop = Shop.where(:id = id).first 
    if shop 
     shop.boot 
     ShopifyAPI::Session.new(shop.shopify_domain, shop.shopify_token) 
    else 
     nil 
    end 
    end 

    def boot 
    if !installed 
     shopify_session 
     init_webhooks 
     self.installed = true 
     self.save! 
    end 
    end 

Wydaje się, że działa dobrze w przypadku zupełnie nowych instalacji, ale po ponownym zainstalowaniu użytkownik nie wydaje się uwierzytelniać (przekierowuje do strony/login po wpisaniu adresu URL shopify) <

Odpowiedz