我发现我在使用ERB视图显示用户信息时使用了大量的重复代码。沿优雅的方式来显示记录,如果他们存在轨道ERB
<% if @user.name.present? %>
<%= @user.name %>
<% end %>
线基本上,我在我看来,这样做的一切,以避免错误(谁可能没有所有的新领域如老年用户)。
有没有更好的方法来做到这一点?
我发现我在使用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
。
因此,如果您的条件没有包含视图的任何其他部分,并且您很高兴在用户没有名称的情况下留出空白区域,则只需使用@user.name
而不需要if
检查。
如果您有更复杂的示例,您还可以查看使用try
。例如,如果用户属于一个组,但是一些老用户不必,你可以用显示组名组:
@user.group.try(:name)
try
上nil
只是安全返回nil
没有一个错误。
你也可以去这一个:
<%= @user.name if @user.name.present? %>
但是,如果你重复完全相同的东西,最好的办法是建立在你的助手为Florent pointed out一个DEF。
如果@ user.name.present可以内联测试'<%= @ user.name? %>'IIRC – Tensibai
'<%= @ user.try:name%>' – Pavling