J'ai un système de templates très ancien écrit au dessus d'ERB. Il s'appuie sur des modèles ERB stockés dans la base de données. Ceux-ci sont lus et rendus. Quand je veux passer des données d'un gabarit à un autre, j'utilise le paramètre: locals parameter to Rails. Pour définir les variables par défaut de ces variables dans certains modèles, j'utilise le défini? méthode qui me dit simplement si la variable locale a été définie et sinon je l'initialiser avec la valeur par défaut comme ceci:défini? méthode dans Ruby and Rails
unless defined?(perex)
perex = true
end
Je suis mise à niveau de l'application aux dernières Rails et je vois un comportement bizarre. Fondamentalement cela fonctionne parfois (parfois perex est indéfini) et parfois non (perex est défini et mis à zéro). Cela arrive sans que rien d'autre ne change.
J'ai deux questions: Y a-t-il un autre moyen que d'utiliser défini? qui s'avère peu fiable (était fiable depuis plusieurs années sur Rails 1.6)? Une telle méthode ne devrait pas entraîner la réécriture de tous les modèles. J'ai passé par des documents de Ruby et n'ai pas pu trouver quelque chose sur défini? méthode. Était-ce obsolète ou suis-je simplement aveugle?
Modifier: Le problème réel a été causé par ce qui semble être un bogue Ruby/eRB. Parfois, l'instruction à moins que ne fonctionne, mais parfois non. La chose étrange est que même si la deuxième ligne a été exécutée perex est restée nulle pour le reste du monde. Supprimer défini? résolu cela.
Ce n'est pas vrai. perex || = true fait la même chose que perex = perex || true qui définit perex à true s'il est indéfini, nul ou faux. Le dernier cas casserait tout. – Honza