2014-12-31 29 views
5

我在Ruby on Rails應用了以下新方法:Rails的Cookie的問題

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

基本上,每個新用戶應該發出識別它們(雖然只是通過cookie)代碼。因此,當用戶創建電影時,創建的cookie存儲在owner字段中。

所以兩個問題:

  1. 使用.empty?方法當我從瀏覽器中刪除cookie時,返回一個空的undefined method'?對於零:NilClass`

  2. 當我在瀏覽器中已經設置了一個cookie,然後創建一個電影,餅乾[:所有者]值是從@ movie.owner代碼有什麼不同?

+0

我不確定我是否理解得很好。你是否試圖在不同的瀏覽器中共享相同的cookie? – turhanco

回答

8
  1. 餅乾[:所有者]要麼是nil(當它沒有被設置),或一字符串(當它被置位)。而不是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. 至於你的第二個問題,你要找的是blank?的方法,:你在哪裏調用save方法?您有沒有可以重寫owner屬性的Movie型號的回調?

1

你也可以使用它。

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