2009-08-18 9 views
2

Je suis sûr que cela a à voir avec les subtilités mentionnées dans Chaussures> Manuel> Règles mais je ne comprends tout simplement pas. Si quelqu'un voudrait expliquer pourquoi @var == nil dans le code suivant ... J'ai pensé que je pourrais utiliser la visite pour basculer entre différentes vues dans mon application, mais cela ne fonctionnera pas si je perds tout état. PourquoiPourquoi est-ce que je perds mes variables d'instance quand j'appelle Shoes # 'visit'?

class MyShoe < Shoes 
    url '/', :index 
    url '/somewhere', :somewhere 

    def index 
    @var = para link("go somewhere", :click => "/somewhere") 
    end 

    def somewhere 
    para "var = #{@var.inspect}" 
    end 
end 

Shoes.app 

Répondre

2

_ pourquoi lui-même a répondu à ce problème, et j'y reviendrai dans une minute. Tout d'abord, pour transmettre des données de la manière la plus simple (en particulier, les chaînes) entre les différentes urls est comme ceci:

class MyShoe < Shoes 
    url '/', :index 
    url '/somewhere/(\d+)', :somewhere 

    def index 
    @var = para link("What is 2 + 2?", :click => "/somewhere/4") 
    end 

    def somewhere(value) 
    para "2 + 2 = #{value}" 
    end 
end 

Shoes.app 

Il correspondront aux sous-groupes de la regex et passer les chaînes correspondantes en tant que paramètres à la méthode. Parfois utile, mais il devient vite difficile. L'autre solution consiste à utiliser des constantes ou des variables de classe, comme _why explains here:

OK, rigoler plus loin, il ressemble à toutes les variables d'instance se

essuyée au début de chaque méthode dans une sous-classe de chaussures .
C'est OK je suppose. Alors, quel est le moyen préféré d'avoir des données
qui est partagée d'une URL de chaussures à l'autre? Le passage d'une page
à l'autre dans l'URL elle-même fonctionne - si c'est une chaîne. Si ce n'est pas
une chaîne, que devez-vous utiliser - @@ class_variables?

Bien sûr, vous pouvez utiliser une classe var. Ceux sont garantis pour persister tout au long de la vie de l'application . Ou une constante.

En outre, chaussures est livré avec SQLite3, les données peuvent être passés là.

Dans votre exemple, il ressemblerait à ceci:

class MyShoe < Shoes 
    url '/', :index 
    url '/somewhere', :somewhere 

    def index 
    @@var = para link("go somewhere", :click => "/somewhere") 
    end 

    def somewhere 
    para "var = #{@@var.inspect}" 
    end 
end 

Shoes.app 
+0

Merci encore Pesto. Je pense que j'ai fini de te harceler pour la journée :-) – Simon