如何在我的自定义lib文件中包含会话?

时间:2014-03-19 12:52:07

标签: ruby-on-rails ruby

我知道我会得到答案,我不应该这样做,但由于解决我遇到的问题的具体方法,我将不得不在我的/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来实现这一点 - 在多次调用中保留相同的值。

2 个答案:

答案 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) - 接收方的方法成为该类的类方法,实例变量将在这些方法之间起作用。