我发现在显示用户信息时,我在ERB视图中使用了大量重复代码。
<% if @user.name.present? %>
<%= @user.name %>
<% end %>
我基本上是为了避免错误(例如可能没有所有新字段的老用户)而在我的视图中执行此操作。
有更好的方法吗?
答案 0 :(得分:8)
将逻辑移动到帮助器中:
def name_for(user)
user.name if user.name.present?
end
在你的观点中调用那个助手:
<%= name_for(@user) %>
答案 1 :(得分:1)
请注意,在没有名称的用户上调用@user.name
不会产生错误。如果@user.name
为nil
,则只有在您尝试在nil
上调用其他方法时才会出现错误,例如@user.name.upcase
。
因此,如果您的条件没有包含视图的任何其他部分,并且您很乐意在用户没有名称时留下空白,则可以使用@user.name
而不使用{{ 1}}检查。
如果您有一个更复杂的示例,您还可以查看使用if
。例如,如果用户属于某个组,但某些较旧的用户没有组,则可以显示组名称:
try
@user.group.try(:name)
上的{p> try
只是安全地返回nil
而没有错误。
答案 2 :(得分:0)
答案 3 :(得分:0)
你也可以选择这个:
<%= @user.name if @user.name.present? %>
但如果你重复完全相同的事情,最好的方法是在助手中创建一个def Florent pointed out。