2015-11-15 2 views
5

У меня есть форма на представлении рельсов, которая передает данные на страницу, которая будет представлять собой страницу сводки корзины покупок.Данные сеанса Rails - Сохранение в хеш-файле

Когда я отправляю данные на следующую страницу, они передаются следующим образом на выходе консоли.

"team"=>{"team_name"=>"Joe Blogs", "email"=>"[email protected]", "player1"=>" 
3", "player2"=>"4", "player3"=>"5"} 

Я хочу, чтобы хранить эти данные в переменном сеансе, а именно как хэш, так что если другая команда получает представлена ​​на страницу резюме я могу добавить его на сессию в качестве другого элемента хэша. т. е. команда [1], команда [2]. Затем я могу получить доступ к команде [1] .team_name и т. Д. И использовать ее соответствующим образом.

Таким образом, я хочу, чтобы пользователь мог заполнить форму и положить ее в корзину. Затем они могут вернуться и сделать то же самое. Наконец, они могут посмотреть на свою тележку и удалить любые записи, которые они не хотят, очистить корзину или отправить то, что они выбрали в базу данных.

Я не могу узнать, как это сделать или если это возможно.

Какие-либо решения или предложения о том, как это реализовать?

ответ

3

Вы можете легко сохранить хэш в сеансе Rails.

Пример:

class SomeController < ApplicationController 
    def some_action 
    session[:cart] = {"team_name"=>"Joe Blogs", "email"=>"[email protected]", "player1"=>"3", "player2"=>"4", "player3"=>"5"} 
    end 
end 

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

Чтобы сохранить сеанс в базе данных, вы можете использовать драгоценный камень activerecord-session_store.

+0

Спасибо за ответ. Так что, если бы я хотел получить доступ только к команде team_name в сеансе [: cart], могу ли я до него добраться? Кроме того, если бы я хотел, чтобы несколько записей могли, сеанс мог бы дать мне сеанс [: cart] [1], например. Извините, если они кажутся основными, но пытаются решить, как это реализовать. – Alan

+1

Да, 'session [: cart]' может содержать массивы и хеши, поэтому он вернет вам все, что вы там положите. Например. 'session [: cart] ['team_name']' –

+0

Отлично, поэтому сеанс [: cart] [1] также может содержать хэш, и я могу получить доступ к этому сеансу [: cart] [1] ['team_name'], если я sat [[cart] [1] = {"team_name" => "Joe Blogs", "email" => "[email protected]", "player1" => "3", "player2" => "4 "," player3 "=>" 5 "}? Это позволило бы мне сохранить несколько «команд» в сеансе? – Alan

Смежные вопросы