我知道我会得到答案,我不应该这样做,但由于解决我遇到的问题的具体方法,我将不得不在我的/lib/example.rb文件中使用session。 (或者至少我认为我将不得不使用它)
我正在调用一个首先运行的动作(seudo代码):
module ApplicationHelper
def funcion(value)
MyClass.use_this(value)
end
end
然后我将在lib/example.rb
module MyClass
# include SessionsHelper # this is not working
def self.use_this(value)
# I want to be able to use session here. What I need to do that in order to make it work.
session[:my_value] = value
end
end
我应该怎么做才能在MyClass中使用会话(我可以将变量传递给MyClass.use_this(value,session)
,但我不想这样做
编辑:
我想用这个session
做的事情是我希望在多个请求期间保留一个值。我多次调用Web应用程序,我想在下次调用时保留一些值。我通过API调用应用程序,我不应该使用数据库来保存值。所以我留下了会话,文本文件,甚至可能还有cookie来实现这一点 - 在多次调用中保留相同的值。
答案 0 :(得分:0)
为什么不在控制器中包含模块,然后直接从那里调用use_this
函数?
module MyClass #should probably rename this anyway
def use_this(value)
session[:my_value] = value
end
end
class SomeController < ApplicationController
include MyClass
def some_action
...
use_this(the_value)
...
end
end
答案 1 :(得分:-1)
为了在MyClass中使用session,你可以使用实例变量@session:
module MyClass
extend SessionsHelper
def self.use_this(value)
@session[:my_value] = value
end
end
module SessionsHelper
def some_method
@session = ...
end
end
self.include(module)方法使包含模块的实例方法(和实例变量)成为包含模块的实例方法。
编辑:包含SessionsHelper 更改为扩展SessionsHelper
self.extend(module) - 接收方的方法成为该类的类方法,实例变量将在这些方法之间起作用。