【问题标题】:Override ShopifyApp Module Method覆盖 ShopifyApp 模块方法
【发布时间】:2016-10-10 19:48:27
【问题描述】:

我正在尝试覆盖ShopifyApp's new method,但不确定从哪里开始。基本上我需要添加另一个字段来获得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

但是没有地方可以使用它。如何以正确的方式解决这个问题?

【问题讨论】:

    标签: ruby-on-rails shopify ruby-on-rails-5


    【解决方案1】:

    覆盖就是覆盖。以下内容会在没有任何 prepending 的情况下为您完成(假设您正在从 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
    

    【讨论】:

    • 谢谢。我没有那个。在我的new 方法中,我放了一个puts,但是当我转到/login 页面时,控制台中没有打印任何内容。
    • @Sylar 你确定你正在加载 lib 文件吗?只是出于好奇将整个代码放入 application_controller.rb (在最后一个 end 之后),看看你的 raise 是否出现
    • 是的。它在 application_controller.rb 时打印,但在 /lib/new.rb 时不打印
    • @Sylar 现在我们知道它可以正常工作。你现在的工作是强制 Rails 加载这个文件。或者,您可以创建一个目录app/monkey_patches/ 并将此文件放在那里app/monkey_patches/shopify_session.rbapp 目录中的所有文件都会自动加载
    • @Sylar 太好了,你已经想通了!
    猜你喜欢
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 2014-06-04
    • 1970-01-01
    相关资源
    最近更新 更多