总是评估条件 link_to_if 名称参数?

Conditional link_to_if name parameter always evaluated?

我的印象是 link_to_if 使用此代码应该没有任何问题:

<%= link_to_if locker.student, locker.student.fullname, locker.student do %>
  <div>more complicated</div>
<% end %>

我在 "fullname" 上遇到无方法错误。 所以,我的印象是,当学生存在时,将创建 link,否则将呈现块。

然而,似乎 name 参数总是被执行,无论 if 条件如何,所以当储物柜上没有学生时它就会中断。 这是真的吗?

如果是(奇怪),我该怎么做?我想要的是避免使用标准 if.else.

感谢

是的,它总是被执行:它是函数的一个参数。

你可以这样做:

<%= link_to_if locker.student, locker.student.try(:fullname), locker.student do %>
  <div>more complicated</div>
<% end %>

或者使用标准 if 包装 link_to

避免这些问题的优雅方法是空对象 and/or 装饰器