Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在保持控制器上下文函数的helper子类中包含helper_Ruby On Rails_Ruby_Dependency Injection_Helper - Fatal编程技术网

Ruby on rails 在保持控制器上下文函数的helper子类中包含helper

Ruby on rails 在保持控制器上下文函数的helper子类中包含helper,ruby-on-rails,ruby,dependency-injection,helper,Ruby On Rails,Ruby,Dependency Injection,Helper,事实上,这是我的问题。我有一个rails应用程序,带有一个MainController、一个HttpHelper和一个ServiceHelper 主控制器.rb class MainController < ApplicationController include ServiceHelper def my_method Service.make_stuff end end module ServiceHelper class Servic

事实上,这是我的问题。我有一个rails应用程序,带有一个MainController、一个HttpHelper和一个ServiceHelper

主控制器.rb

class MainController < ApplicationController
    include ServiceHelper
    def my_method
        Service.make_stuff
    end
end
module ServiceHelper
    class Service
        include HttpHelper
        def self.make_stuff
            http__foo
        end
    end
end
Service = ServiceHelper::Service
module HttpHelper
    def http__foo
        #stuff
        params[:bar].nil?
    end
end
http\u helper.rb

class MainController < ApplicationController
    include ServiceHelper
    def my_method
        Service.make_stuff
    end
end
module ServiceHelper
    class Service
        include HttpHelper
        def self.make_stuff
            http__foo
        end
    end
end
Service = ServiceHelper::Service
module HttpHelper
    def http__foo
        #stuff
        params[:bar].nil?
    end
end
如果一切正常,此代码应该告诉我是否存在
:bar
参数,但我有一个问题。首先,这段代码不起作用,它告诉我没有定义
http\uu foo
,当然是因为服务中的
include-HttpHelper
不起作用


我的第二个问题是,如果include有效,则
params
变量可能会出现问题。如果我在控制器中调用这个方法(
http\uuuufoo
),它会很好,但是我从一个子类调用它,那么我不确定它是否可靠。

确保stuff
是一个类方法
http_-foo
是一种实例方法。因此,当您从
make\u stuff
调用
http\u foo
时,就像调用未定义的
Service.http\u foo()
。定义的是
Service.new.http\u foo()


我不知道您想做什么,但以我的拙见,通过查看您的代码,您似乎并不真正熟悉
Rails MVC概念
,并创建
MainController
(为什么不使用
ApplicationController
?),以及您使用助手的方式对我来说很奇怪。从头开始可能是个好主意。

oldergod关于类与实例方法的问题是正确的。此外,params是ActionController中定义的方法,它位于所有控制器的继承树之上。params方法在服务中不可用(当您在服务中包含HttpHelper时,它将在服务中结束),除非您将其设置为ActionController或ApplicationController的子类,这会有点奇怪,因为它不是控制器。

好的,谈论模块的实例似乎很奇怪,但我终于明白了,你是在包括之后才谈到这件事的。我只是想尝试一些技巧,MVC不是问题,我只是想定制助手,但这不是个好主意;)