2014-12-31 6 views
5

は、私はレールのアプリ上のRubyで次の新しいメソッドがあります。Railsのクッキーを発行

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

を基本的には、それぞれの新しいユーザーは、(ちょうどクッキーによるが)それらを識別するコードを発行したことになっています。したがって、ユーザーがムービーを作成すると、作成されたクッキーはownerフィールドに保存されます。

ので、2つの問題:

  1. が.emptyを使用していますか?メソッドを呼び出すと、ブラウザからクッキーを削除すると、undefined methodが返されます。 nilのために:私はを行うNilClass`

  2. は、すでにブラウザに設定されたCookieを持ち、その後、ムービーを作成、クッキー[:所有者]の値は、@ movie.ownerコードと異なるのですか?

+0

わかりましたかわかりません。異なるブラウザ内で同じCookieを共有しようとしていますか? – turhanco

答えて

8
  1. クッキー[:所有者](それが設定されていた場合)nil(それが設定されていない場合)、または文字列のどちらかになります。あなたがsaveメソッドを呼び出してください:あなたが探している方法は、あなたの第二の問題については代わりに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?のですか? owner属性を書き換えることができるMovieモデルのコールバックはありますか?

1

これも使用できます。

def new 
    if !cookies[:owner] 
     cookies[:owner] = SecureRandom.hex 
    end 
    @movie = Movie.new 
    @movie.owner = cookies[:owner] 
end 
関連する問題