实际上,这是我的问题。我有一个带有MainController,HttpHelper和ServiceHelper的rails应用程序。
main_controller.rb
class MainController < ApplicationController
include ServiceHelper
def my_method
Service.make_stuff
end
end
service_helper.rb
module ServiceHelper
class Service
include HttpHelper
def self.make_stuff
http__foo
end
end
end
Service = ServiceHelper::Service
http_helper.rb
module HttpHelper
def http__foo
#stuff
params[:bar].nil?
end
end
如果一切正常,这段代码应该告诉我:bar
param是否存在,但是我有问题。首先,此代码不起作用,它告诉我http__foo
未定义,当然因为服务中的include HttpHelper
不起作用。
我的第二个问题是,如果包含有效,params
变量可能会出现问题。如果我在控制器中调用此方法(http__foo
),它会没问题,但是我从子类中调用它,然后我不确定它是否可靠。
答案 0 :(得分:1)
make_stuff
是一种类方法。 http_foo
是一种实例方法。因此,当您从http__foo
拨打make_stuff
时,就像调用未定义的Service.http_foo()
一样。定义的是Service.new.http_foo()
。
我不知道你想做什么,但是在我的拙见中,通过观察你的代码,你似乎并不熟悉Rails MVC concept
并创建MainController
(为什么不使用ApplicationController
?),以及你使用助手的方式对我来说很奇怪。从头开始重启可能是个好主意。
答案 1 :(得分:0)
oldergod对于类与实例方法问题是正确的。另外,params是ActionControllor中定义的方法,它位于所有控制器的继承树之上。 params方法将不在服务中(在服务中包含HttpHelper时它最终会出现),除非你把它作为ActionController或ApplicationController的子类,这有点奇怪,因为它不是一个控制器。