我有一个相当老的基于ERB的模板系统。它依赖于存储在数据库中的ERB模板。这些模板会被读取和渲染。当我想从一个模板传递数据到另一个模板时,我使用Rails render方法的:locals参数。为了设置某些模板中这些变量的默认变量,我使用defined? 方法,它简单地告诉我局部变量是否已定义,如果没有,则将它初始化为默认值,如下所示:
unless defined?(perex)
perex = true
end
我正在升级应用程序到最新的Rails版本,但我看到了一些奇怪的行为。基本上有时可行(有时perex未定义),有时不行(perex已定义并设置为nil)。这是在没有其他任何变化的情况下发生的。
I have two questions: Is there any better way other than using defined? which is proving unreliable (was reliable for several years on top Rails 1.6)? Such a way should not result in me rewriting all the templates. I have been going through Ruby docs and was not able to find anything about defined? method. Was it deprecated or am I just plain blind?
编辑:实际问题可能是由于Ruby/eRB错误引起的。有时候unless语句会起作用,但有时候不会。奇怪的是,即使第二行被执行了,perex仍然对世界其余部分为空。删除defined?解决了这个问题。