0

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

主控制器.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参数是否存在,但我有问题。首先,这段代码不起作用,它告诉我http__foo没有定义,当然是因为include HttpHelperin Service 不起作用。

params我的第二个问题是,如果包含工作,变量可能会有问题。如果我http__foo在控制器中调用这个方法(

4

2 回答 2

1

make_stuff是一个类方法。http_foo是一个实例方法。因此,当您http__foo从您的调用时make_stuff,就像调用Service.http_foo()未定义一样。定义的是Service.new.http_foo().

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

于 2012-09-20T04:26:05.163 回答
0

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

于 2012-09-20T05:57:02.317 回答