2011-02-15 23 views
8

vi una gran respuesta re cómo configurar las sesiones para los carriles 3 (Rails sessions current practices)carriles 3, Heroku, cómo utilizar las sesiones

recogemos una serie de preguntas por parte del usuario y me gustaría mantener en sesión una lista de sus respuestas hasta que lleguemos al final y luego escribirlo todo ...

pero no estoy seguro de cómo escribir y leer información de la sesión ... cualquier puntero rápido sería apreciado sobre cómo guardar , por ejemplo, el contenido de un hash

Además, tener nuestra aplicación alojada en una grilla en Heroku cambia la forma en que podríamos/deberíamos manejar sesiones?

Saludos, JP

+1

Es ésta pregunta específica a Heroku? – ClosureCowboy

+0

+ gran pregunta, ¡gracias por preguntar! – andy

Respuesta

18

No tiene que cambiar nada para Heroku. De forma predeterminada, las sesiones de Rails se almacenan en una cookie cifrada, por lo que no es necesaria la configuración del lado del servidor.

Sin embargo, una cookie solo puede almacenar 4.096 bytes de datos. Si está almacenando mucho de datos en la sesión (que generalmente no se recomienda), puede desbordar la cookie. En este caso, es posible que desee configurar las cookies ActiveRecord o Memcached. Ambos son fáciles de hacer y no son realmente problemas específicos de Heroku. Si necesita ayuda con esto, siempre puede hacer otra pregunta de StackOverflow. Por ahora, no es preocupante hasta que llegues al límite.

Parte del código áspera para almacenar y leer sus respuestas en la sesión, asumiendo preguntas y respuestas son modelos ActiveRecord:

def store_answer(question, answer) 
    session[:answers] ||= {} 
    session[:answers][question.id] = answer.id 
end 

def read_answer(question) 
    Answer.find(session[:answers][question.id]) 
end 
+0

excelente y útil respuesta, no tenía idea de que fuera así de simple. ¡Muchas gracias! – jpwynn

+0

¿Está 'Answer.find (session [: answers] [question.id])' parte de su modelo? (Soy nuevo en MVC y ROR) – ProfessionalAmateur

4

sesiones en los carriles son muy fáciles de usar, basta con hacer uso de la estructura de hash similar a la sesión de la siguiente manera:

  • (conjunto) de sesiones [: mi_nombre] = " Joe"
  • (leer) pone de sesiones [: mi_nombre]

no me imagino que tendrá que cambiar nada para el despliegue de Heroku.

+0

también una excelente respuesta ... conciso. esto es lo que terminamos haciendo por ahora. ¡gracias! – jpwynn