2009-06-15 108 views
3

如何將重要會話信息視爲模型?導軌會話模型

我已經開始玩弄它,它的一些作品。但我不確定我錯過了什麼?有沒有人知道一個好的地方開始或我可以找到一些很好的例子?

另外,我可以使用模型來設置會話變量,但是如何從模型中獲取它們而不是始終使用會話[: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 

回答

1
+0

我看到了。但這個主題相當簡短。 – holden 2009-06-15 13:20:43

2

有一些陷阱應考慮使用這種方法

  1. 根據您的會話存儲系統上,您的會話可能會增長過大,如果你在它正在把對象是複雜的。 Rails 2.3中會話的默認存儲是cookies,因此瀏覽器肯定會有限制。
  2. 如果您的模型發生更改,在部署應用程序後,用舊會話編制的用戶將顯示與舊模型定義編組在一起的對象,以便它們可能會收到意外錯誤。
+0

沒有太多我想放在那裏,只是一個日期和一些IDS。所以我不擔心太空,但它會經常被不同的控制器取代。 – holden 2009-06-15 20:44:02

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 
1

您只需要一種方法,可以從會話中返回所需的數據。

def blah 
    @session[:blah] 
end 

如果你需要很多的這些,我想創建一個與工作方式類似於attr_reader的方法擴展類的插件。類似於

session_reader :blah