2014-12-31 4 views
5

У меня есть следующий новый метод в Ruby On Rails приложения:Rails Cookie Issue

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

В принципе, каждый новый пользователь, как предполагается, будет выдан код, который идентифицирует их (хотя только с помощью куки). Поэтому, когда пользователь создает фильм, созданный файл cookie сохраняется в поле owner.

Так две проблемы:

  1. Использование .empty? метод, когда я удаляю cookie из браузера, возвращает undefined method пустым? ' для ноля: NilClass`

  2. Когда я сделать есть печенье уже установлен в браузере, а затем создать фильм, печенье [: владелец] значение отличается от @ movie.owner коды?

+0

Я не уверен, хорошо ли я понял. Вы пытаетесь использовать один и тот же файл cookie в разных браузерах? – turhanco

ответ

8
  1. печенье [: владелец] будет либо nil (если он не был установлен) или String (если он установлен). Метод вы ищете является blank?, вместо 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. Что касается вашего второго вопроса: где вы вызываете метод save? У вас есть обратный вызов на модели Movie, которая может переписать атрибут owner?

1

Вы также можете использовать это.

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