我一直是个坏子元素,在呈现部分模板时,如果没有在:locals散列中明确定义值,我会在部分模板中使用以下语法为局部变量设置默认值--

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

直到最近(我看不出有什么原因)未传递的变量开始表现得好像它们被定义为nil(而不是未定义的)一样,这种方法似乎还不错.

正如许多有帮助的人所指出的那样,http://api.rubyonrails.org/classes/ActionView/Base.html表示not使用

defined? foo

而是使用

local_assigns.has_key? :foo

我试图改变我的方式,但这意味着改变了很多模板.

我可以/应该提前在所有模板中进行更改吗?有什么诡计需要我注意吗?我需要多努力来测试每一个?

推荐答案

我这样做:

<% some_local = default_value if local_assigns[:some_local].nil? %>

Ruby-on-rails相关问答推荐

Rails 7 - 富文本不显示附加的媒体内容

尽管安装并需要 pry-rails gem,但 Rails 容器内出现未定义方法‘pry’错误

我的 Ruby on Rails Web API 的 Docker 映像未在服务器上构建,因为它未与 ruby​​gems.org 连接

ViewModel 和 Controller 有什么区别?

如何在 IRB/Rails 控制台中 suppress 返回值的输出?

ArgumentError:您需要使用 :if 提供至少一个验证

Ruby的自动代码质量工具?

如何在 to_json 中获取回形针图像的 url

查找日期时间与今天匹配的记录 - Ruby on Rails

Rails 3:如何正确显示textarea中的文本?

Ruby 元素是否存在于数组中

将 Amazon SES 与 Rails ActionMailer 结合使用

设计和强大的参数

什么是Ruby 用于 BESIDES 轨道?

Rails 4 pgsql add_index 类型为 GIN 或 GiST

您将 Rack 中间件文件和要求放在哪里?

Rspec - Rails - 如何遵循重定向

rake db:回滚不起作用?

使用连接的 Ruby on Rails ActiveRecord 查询

rails 3,如何在 Settings.yml 文件中使用 ENV 配置变量?