我对Rails有点新手(即愚蠢,需要一些教学)。
我有一个执行特定任务(ControllerFoo
)的控制器(称为theMethod
),这可能在其他控制器中有用(例如,来自ControllerBar
内)。那么,当然,该方法在self.theMethod
中定义为ControllerFoo
(这意味着它是一种类方法,对吧?),并在ControllerBar
中以ControllerFoo.theMethod
的形式进行访问。困惑了吗?
问题在于:ControllerFoo.theMethod
使用会话数据,从ControllerBar
调用时,会话为零。实际上,从自身调用时,似乎会话也是零。我想我所说的是类方法无法访问会话数据?
< rant> 我讨厌如何不能像在PHP中那样简单地访问会话数据< / rant>
所以现在,由于我不够聪明,不知道如何正确地做到这一点,我只是在我的应用程序的几个地方复制了逻辑。但这根本不是干的,我讨厌它。
那么如何在控制器中创建一个可供其他控制器访问的方法,并且还可以访问会话数据?
class ControllerFoo < ApplicationController
def self.theMethod (greeting)
p "#{greeting} #{session[:user]}!"
end
end
class ControllerBar < ApplicationController
def show
ControllerFoo.theMethod("Hello,")
end
end
答案 0 :(得分:5)
几种选择......
e.g。
module SharedModule
def theMethod (greeting)
p "#{greeting} #{session[:user]}!"
end
end
class ControllerFoo < ApplicationController
include SharedModule
end
class ControllerBar < ApplicationController
include SharedModule
def show
theMethod("Hello,")
end
end
答案 1 :(得分:1)
你要这样做的方法是Ruby创建一个包含你想要共享的类(或实例)方法的模块,并将它包含在你需要定义这些方法所需的类中。