Переопределение метода модуля ShopifyApp

#ruby-on-rails #shopify #ruby-on-rails-5

#ruby-on-rails #shopify #ruby-on-rails-5

Вопрос:

Я пытаюсь переопределить новый метод ShopifyApp, но не уверен, с чего начать. В принципе, мне нужно добавить еще одно поле, чтобы получить params :

/lib/shopify_app/sessions_concern/new.rb:

 module ShopifyApp
  module SessionsConcern
    module New
      def new
        if params[:field] == "abc"
         authenticate if params[:shop].present?
        end # or else ...
      end
    end
  end
end
  

Чтобы использовать этот модуль, я бы сделал что-то подобное в контроллере:

 ShopifyApp::SessionsConcern.prepend ShopifyApp::SessionsConcern::New
  

Но нет, где это использовать. Как сделать это правильно?

Ответ №1:

Переопределение есть переопределение. Следующее сделает это за вас без каких-либо prepend изменений (при условии, что вы загружаете код из lib каталога):

 # lib/shopify_monkeypatching.rb
module ShopifyApp
  module SessionsConcern
    def new
      if params[:field] == "abc"
       authenticate if params[:shop].present?
      end # or else ...
    end
  end
end
  

Комментарии:

1. Спасибо. Я этого не делаю. В моем new методе я поставил a puts , но ничего не печатается в консоли, когда я перехожу на /login страницу.

2. @Sylar вы уверены, что загружаете lib-файлы? просто из любопытства поместите весь код, скажем, application_controller.rb (после последнего end ) и посмотрите, появится ли ваш raise или что-то еще

3. ДА. Он печатает при application_controller.rb входе, но не при входе /lib/new.rb

4. @Sylar теперь мы знаем, что он работает правильно. Теперь ваша задача — заставить Rails загрузить этот файл. В качестве альтернативы вы можете создать каталог app/monkey_patches/ и поместить туда этот файл app/monkey_patches/shopify_session.rb . Все файлы из app каталога загружаются автоматически

5. @Sylar отлично, что вы это поняли!