модель сессии рельсов - PullRequest
3 голосов
/ 15 июня 2009

Как я могу обрабатывать важную информацию о сеансе, как если бы это была модель?

Я начал играть с этим, и некоторые из них работают. Но я не уверен, что мне не хватает? Кто-нибудь знает хорошее место для начала или где я могу найти несколько хороших примеров?

Кроме того, я могу использовать модель для установки переменных сеанса, но как насчет получения их из модели вместо того, чтобы всегда использовать сеанс [: 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 ]

2 голосов
/ 15 июня 2009

При таком подходе необходимо учитывать некоторые недостатки

  1. В зависимости от вашей системы хранения сессий, ваша сессия может стать слишком большой, если объекты, которые вы помещаете в нее, являются сложными. Хранилищем по умолчанию для сеансов в Rails 2.3 являются файлы cookie, поэтому браузер определенно установит ограничение.
  2. Если ваша модель изменится, после развертывания вашего приложения пользователям со старыми сеансами будут представлены объекты, собранные из старых определений модели, чтобы они могли получить неожиданные ошибки.
1 голос
/ 19 февраля 2010

Вам просто нужен метод, который возвращает нужные вам данные из сеанса.

def blah
  @session[:blah]
end

Если вам нужно их много, я бы создал плагин, который расширяет класс с помощью метода, который работает аналогично attr_reader. Что-то вроде

session_reader :blah
1 голос
/ 06 августа 2009

+ 1 на Railscast Райана Бейтса.

Этот тип вещей работает для меня;

  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 голос
/ 15 июня 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...