优雅的方式只显示记录,如果它们存在于轨道ERB中
我发现在显示用户信息时,我在ERB视图中使用了大量重复代码。 沿着这条路线
我基本上是为了避免错误(例如可能没有所有新字段的老用户)而在我看来为此做的一切。
有一个更好的方法吗?
将逻辑移动到帮助器中:
def name_for(user) user.name if user.name.present? end
并在您的视图中调用该帮助程序:
<%= name_for(@user) %>
请注意,在没有名称的用户上调用@user.name
不会生成错误。 如果@user.name
为nil
,则只有在尝试在nil
上调用另一个方法时才会出现错误,例如@user.name.upcase
。
因此,如果您的条件没有包含视图的任何其他部分,并且您很乐意在用户没有名称时留下空白区域,则可以使用@user.name
而不使用if
检查。
如果你有一个更复杂的例子,你也可以看一下使用try
。 例如,如果用户属于某个组,但某些较旧的用户没有组,则可以显示组名称:
@user.group.try(:name)
try
nil
只是安全地返回nil
而没有错误。
你也可以选择这个:
<%= @user.name if @user.name.present? %>
但是如果你重复完全相同的事情,最好的方法是在你的助手中创建一个def,就像Florent指出的那样 。