我有一个相当旧的模板系统写在ERB之上。它依赖于存储在数据库中的ERB模板。那些被阅读和渲染。当我想将数据从一个模板传递到另一个模板时,我使用:locals参数来Rails渲染方法。为了在一些模板中设置这些变量的默认变量,我使用了定义的?方法简单地告诉我,如果局部变量定义;如果没有使用默认值初始化它是这样的:定义?方法在Ruby和Rails
unless defined?(perex)
perex = true
end
我升级应用最新的Rails,我看到一些奇怪的行为。基本上这有时会起作用(有时perex是未定义的),有时它不会(perex被定义并设置为零)。这发生在没有其他变化的情况下
我有两个问题: 除了使用定义之外,还有其他更好的方法吗?这证明是不可靠的(在顶级Rails 1.6上可靠几年)?这样的方式不应该导致我重写所有的模板。 我一直在浏览Ruby文档,无法找到关于定义的任何内容?方法。它已被弃用,还是我只是盲目的?
编辑:实际问题是由似乎是Ruby/eRB错误引起的。有时除非声明会起作用,但有时不会。奇怪的是,即使第二条线执行perex斯蒂尔留在世界其他地方。删除已定义的?解决了。
这是不正确的。 perex || = true与perex = perex ||相同如果它是未定义的,则将perex设置为true,否则为false。最后的情况会打破一切。 – Honza 2008-10-27 08:16:14