为什么有条件关心执行代码尽管没有返回true?

时间:2014-01-28 17:41:39

标签: ruby-on-rails ruby conditional

如果我们在具有@project实例变量的视图中,我有条件地显示项目标题的代码:

<title>My app <%= "- " + @project.title if @project.present? %></title>

但它给出了以下消息的错误:“无法将nil转换为String”,即尽管条件语句为false,它仍会尝试执行我的字符串连接。

为什么它甚至打扰?

1 个答案:

答案 0 :(得分:2)

您检查项目是否存在

@project.present?

但是您不检查其title属性的值是否已设置。当titlenil时,以下串联

"- " + @project.title
由于您正在尝试连接

将因can't convert nil into String错误而失败

"- " + nil

这是两种不同的类型。您必须明确处理此情况,或使用插值

使用nil-to-string强制转换
<%= "- #{@project.title}" if @project.present? %>

此外,请注意优先顺序。如果条件以这种方式嵌入打印,可能会导致由评估优先级引起的模糊错误。