如果我们在具有@project
实例变量的视图中,我有条件地显示项目标题的代码:
<title>My app <%= "- " + @project.title if @project.present? %></title>
但它给出了以下消息的错误:“无法将nil转换为String”,即尽管条件语句为false,它仍会尝试执行我的字符串连接。
为什么它甚至打扰?
答案 0 :(得分:2)
您检查项目是否存在
@project.present?
但是您不检查其title
属性的值是否已设置。当title
为nil
时,以下串联
"- " + @project.title
由于您正在尝试连接,将因can't convert nil into String
错误而失败
"- " + nil
这是两种不同的类型。您必须明确处理此情况,或使用插值
使用nil-to-string强制转换<%= "- #{@project.title}" if @project.present? %>
此外,请注意优先顺序。如果条件以这种方式嵌入打印,可能会导致由评估优先级引起的模糊错误。