240 votes

variables locales en option dans les modèles partielle de rails : Comment faire de la (définis ? foo) désordre ?

J'ai été un mauvais garçon et utilisé la syntaxe suivante dans mon partiel de modèles, afin de définir des valeurs par défaut pour les variables locales si une valeur n'est pas définie explicitement dans l' :les habitants de hachage lors du rendu de l'partielle --

<% foo = default_value unless (defined? foo) %>

Tout semblait aller bien jusqu'à récemment, lorsque, pour aucune raison je ne pouvais discerner) non transmis variables commencé à se comporter comme si elles avaient été définies à zéro (plutôt que non-défini).

Comme il a été rappelé par divers gens utiles, http://api.rubyonrails.org/classes/ActionView/Base.html dit de ne pas utiliser

defined? foo

et au lieu d'utiliser

local_assigns.has_key? :foo

Je suis en train de modifier mes habitudes, mais cela implique de changer beaucoup de modèles.

Peut/doit je viens d'avancer et de faire ce changement dans tous les modèles? Est-il trickiness j'ai besoin de regarder pour? La façon diligente faire j'ai besoin de tester chacun d'eux?

348voto

jonnii Points 17046

J’ai procédez comme suit :

J’espère que cela aide...

167voto

Pablo Cantero Points 2746

Étant donné que est une table de hachage, vous pouvez également utiliser [fetch](http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-fetch) avec le paramètre optionnel .

Cette requête affichera si n’a pas été passée dans le hachage de la population locale.

88voto

hgmnz Points 7239

Qu’en est-il

Cela dit « utiliser si ce n’est pas zéro ou la valeur true. Sinon assigner foo »

12voto

gamov Points 968

Je pense que cela doit être répété ici (à partir de http://api.rubyonrails.org/classes/ActionView/Base.html) :

Si vous avez besoin de savoir si une certaine variable locale a reçu une valeur dans un appel rendu particulier, vous devez utiliser le modèle suivant :

Tests à l’aide définie ? titre ne fonctionnera pas. Il s’agit d’une restriction de la mise en œuvre.

1voto

Je pense qu’une meilleure option qui permet de multiples variables par défaut :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X