Cookies, session

[code=ruby]class VotesController < ApplicationController

before_filter :test, :only => [:yes, :no]

def yes
vote = Vote.find(params[:id]
session[:vote] ||= []
session[:vote] << vote.id
end

private

def test
if session[:vote] && session[:vote].include?(params[:id].to_i)
redirect_to lol_path
end
end[/code]
Powyższy kod ładnie działa, teraz mam pytania:

  1. Czy “||= []” oznacza zainicjonowanie nowej tablicy?
  2. Czy to normalne, że po zamknięciu przeglądarki i ponownym uruchomieniu, session jest “czyszczone”? Jak tak, to gdzie można ustawić (jeśli wogóle się da) wygasanie sesji (:expires ?).

Dzięki z góry :slight_smile:

  1. Poniższe dwie linie kodu działają tak samo.

session[:vote] = [] if session[:vote].nil? session[:vote] ||= []
2. O sessji możesz poczytać http://guides.rubyonrails.org/action_controller_overview.html#session .

dzięki seban za odpowiedź na pierwsze pytanie :slight_smile: co do drugiego, to znam te przewodniki :wink:

Na pytanie drugie sam sobie odpowiem: od wersji 2.3 można ustawić, kiedy ma wygasnąć sesja. W pliku config/intializers/session_store.rb należy dodać np. :expire_after => 30.minutes

ActionController::Base.session = { :key => '_yourappname_session', :expire_after => 30.minutes, :secret => '4f50711b8f0f49572...' }
źródło

Pozdrawiam

[quote=seban]1. Poniższe dwie linie kodu działają tak samo.

session[:vote] = [] if session[:vote].nil? session[:vote] ||= []
[/quote]
Mała poprawka:

[code=ruby]x ||= y

jest równoważne

x = y unless x[/code]