仅显示存在于 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.name
是 nil
,则仅当您尝试在 nil
上调用其他方法时才会发生错误,例如@user.name.upcase
.
因此,如果您的条件没有包含视图的任何其他部分,并且您很乐意留空 space 如果用户没有姓名,您可以使用 @user.name
没有 if
检查。
如果你有更复杂的例子,你也可以看看使用 try
。例如,如果用户属于一个组,但一些老用户没有组,您可以显示组名:
@user.group.try(:name)
try
在 nil
上安全地 returns nil
没有错误。
https://github.com/raganwald/andand
使用它来避免这些错误
user.andand.name
它将检查用户对象是否为 nil,然后不要在其上调用名称。
你也可以选择这个:
<%= @user.name if @user.name.present? %>
但是如果你重复完全相同的事情,最好的方法是在你的助手中创建一个 def 作为 。
我发现在显示有关用户的信息时,我在 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.name
是 nil
,则仅当您尝试在 nil
上调用其他方法时才会发生错误,例如@user.name.upcase
.
因此,如果您的条件没有包含视图的任何其他部分,并且您很乐意留空 space 如果用户没有姓名,您可以使用 @user.name
没有 if
检查。
如果你有更复杂的例子,你也可以看看使用 try
。例如,如果用户属于一个组,但一些老用户没有组,您可以显示组名:
@user.group.try(:name)
try
在 nil
上安全地 returns nil
没有错误。
https://github.com/raganwald/andand
使用它来避免这些错误
user.andand.name
它将检查用户对象是否为 nil,然后不要在其上调用名称。
你也可以选择这个:
<%= @user.name if @user.name.present? %>
但是如果你重复完全相同的事情,最好的方法是在你的助手中创建一个 def 作为