rails会话模型

时间:2009-06-15 10:29:03

标签: ruby-on-rails session model

如何将重要会话信息视为模型?

我开始玩弄它,其中一些有用。但我不确定我错过了什么?有谁知道一个好的起点或在哪里可以找到一些好的例子?

另外,我能够使用模型来设置会话变量,但是从模型中获取它们而不是总是使用session [:blah] ...如何从模型中检索它们呢?

class Cart
  attr_reader :items

  def initialize(session)
    @session = session
    @session[:cart] ||= []
    @items ||= session[:cart]
  end

  def add_rooms(new_rooms,startdate,days)
    #remove 0 values
    new_rooms.delete_if {|k, v| v == "0" }
    rooms = []
    new_rooms.each do |k, v|
      #rname = Room.find(k)
      #night = Available.find_by_room_id(k)
      rooms << {:room_id => k, :people => v, :no_days => days, :startdate => startdate} 
    end

    @session[:cart] = rooms
    #@items = rooms

  end

end

4 个答案:

答案 0 :(得分:2)

这种方法需要考虑一些问题

  1. 根据您的会话存储系统,如果您放入的对象很复杂,则会话可能会变得太大。 Rails 2.3中会话的默认存储是cookie,因此浏览器肯定会有限制。
  2. 如果您的模型发生变化,在部署您的应用后,旧会话中的用户将会看到旧模型定义中编组的对象,因此可能会出现意外错误。

答案 1 :(得分:1)

答案 2 :(得分:1)

Ryan Bates在Railscast上获得+1。

这种类型的东西适合我;

  def set_order_id(i)
    @cart_session[:order_id] = i
  end
  def has_order_id?
    @cart_session[:order_id]
  end
  def order_id
    has_order_id?
  end

答案 3 :(得分:1)

您只需要一个从会话中返回所需数据的方法。

def blah
  @session[:blah]
end

如果你需要很多这些,我会创建一个插件,使用与attr_reader类似的方法扩展Class。像

这样的东西
session_reader :blah