2010-09-24 8 views
1

J'utilise l'initialiseur du contrôleur pour configurer les éléments dont j'ai besoin.Où puis-je utiliser des cookies dans Ruby on Rails

def initialize 
    super() 
    a = cookies[:a] # EXCEPTION 

end 

Cependant, je ne peux pas utiliser de cookies car il est nul, le système ne les a pas encore lus depuis l'en-tête.

Le même problème était avec ASP.NET MVC, où je ne pouvais pas accéder aux cookies dans le constructeur, mais je pouvais y accéder dans la méthode Initialize().

Comment puis-je obtenir les cookies dans Rails?

Répondre

1

Si vous souhaitez définir quelque chose avant chaque demande, vous devez utiliser un before_filter.

class MyController << ApplicationController 
    before_filter :cookie_setup 

    def cookie_setup 
    a = cookies[:a] 
    .. whatever you want to do with 'a' 
    end 
end 
+0

Merci! Cela a résolu le problème. – Alex

0

Ancien J'ai des problèmes avec cela aussi, cela devrait fonctionner:

cookies['a'] = 'value' 
a = cookies['a'] 
0

Plus précisément, les cookies est un hachage et ce que vous faites est d'ajouter une valeur paire de clés avec la syntaxe hash[:key] = value au hachage. Donc, l'ajout d'une clé, sans assigner de valeur, vous donnera une valeur nulle quand vous le demanderez.

irb(main):006:0> cookies = {} 
=> {} 
irb(main):007:0> cookies[:a] = 'value' 
=> "value" 
irb(main):008:0> cookies.inspect 
=> "{:a=>\"value\"}" 
irb(main):010:0> a= cookies[:b] 
=> nil 
irb(main):011:0> cookies.inspect 
=> "{:a=>\"value\"} 
+0

Le cookie n'est pas nul, et je les vérifie. Merci quand même. – Alex

+0

Je pense que vous avez mal compris. la valeur que vous ajoutez à la clé dans votre code est nulle. 'a = cookies [: a]' vous n'avez pas de valeur attribuée à la clé: a. donc quand vous demandez la valeur stockée dans un plus tard dans 'a' ce sera nul. parce que 'cookies [: a]' est évalué à zéro. votre problème n'a rien à voir avec l'accès dans le constructeur, il s'agit de ne pas comprendre la syntaxe de comment ajouter des paires de valeurs clés à un hachage. –

+0

Je suis désolé mais vous ne comprenez pas. Le problème est d'accéder aux cookies à partir de l'initialiseur car l'objet de requête est nul. Il y a le "a" cookie dans le navigateur, donc ce n'est pas nul. – Alex