2014-12-31 16 views
5

Ho il seguente nuovo metodo in Ruby on Rails app:Rails Cookie Problema

def new 
    if cookies[:owner].empty? 
    cookies[:owner] = SecureRandom.hex 
    end 
    @movie = Movie.new 
    @movie.owner = cookies[:owner] 
end 

In sostanza, si suppone che ogni nuovo utente deve essere rilasciato un codice che li identifica (anche se solo dal cookie). Quindi, quando l'utente crea un film, il cookie che è stato creato viene memorizzato nel campo owner.

così due problemi:

  1. Uso del .empty? metodo quando elimino il cookie dal browser, restituisce uno undefined method vuoto? ' per nil: NilClass`

  2. Quando ho faccio hanno un cookie già impostati nel browser e quindi creare un filmato, i biscotti [: proprietario] valore è diverso dal codice @ movie.owner?

+0

Non sono sicuro di aver capito bene. Stai provando a condividere lo stesso cookie su browser diversi? – turhanco

risposta

8
  1. cookie [:] proprietario o sarà nil (quando non è stato impostato), o una stringa (quando è stata impostata). Il metodo che stai cercando è blank?, invece di empty?

    2.1.0 :003 > nil.blank? 
    => true 
    
    2.1.0 :005 > "i'm not blank".blank? 
    => false 
    
    2.1.0 :006 > "  ".blank? 
    => true 
    
  2. quanto riguarda il tuo secondo problema: dove si fa a chiamare il metodo save? Avete una richiamata sul modello Movie che potrebbe riscrivere l'attributo owner?

1

Si potrebbe anche usare questo.

def new 
    if !cookies[:owner] 
     cookies[:owner] = SecureRandom.hex 
    end 
    @movie = Movie.new 
    @movie.owner = cookies[:owner] 
end