仅显示存在于 rails ERB 中的记录的优雅方式

Elegant way to only show records if they exist in rails ERB

我发现在显示有关用户的信息时,我在 ERB 视图中使用了大量重复代码。按照

<% if @user.name.present? %>
  <%= @user.name %>
<% end %>

我基本上对我认为的所有内容都这样做以避免错误(例如,可能没有所有新字段的老用户)。

有更好的方法吗?

将逻辑移动到助手中:

def name_for(user)
 user.name if user.name.present?
end

并在您的视图中调用该助手:

<%= name_for(@user) %>

请注意,对没有姓名的用户调用 @user.name 不会产生错误。如果 @user.namenil,则仅当您尝试在 nil 上调用其他方法时才会发生错误,例如@user.name.upcase.

因此,如果您的条件没有包含视图的任何其他部分,并且您很乐意留空 space 如果用户没有姓名,您可以使用 @user.name 没有 if 检查。

如果你有更复杂的例子,你也可以看看使用 try。例如,如果用户属于一个组,但一些老用户没有组,您可以显示组名:

@user.group.try(:name)

trynil 上安全地 returns nil 没有错误。

https://github.com/raganwald/andand

使用它来避免这些错误

user.andand.name

它将检查用户对象是否为 nil,然后不要在其上调用名称。

你也可以选择这个:

<%= @user.name if @user.name.present? %>

但是如果你重复完全相同的事情,最好的方法是在你的助手中创建一个 def 作为