我的目标是显示用户的个人资料图片。有些用户不会上传个人资料图片,因此我想为他们显示默认个人资料图片。
我可以在这样的视图中执行此操作:
<% if post.user.avatar.presence %>
<%= image_tag post.user.avatar.url %>
<% else %>
<%= link_to user_path(post.user), :class => "default-profile-image" do %>
<i class="fa fa-user"></i>
<% end %>
<% end %>
但这似乎不是最佳的。如果我想在其他地方使用逻辑怎么办?我不想在我的观点中重复这段代码。
在我的应用中的其他位置回收此代码的最佳方法是什么?
谢谢!
答案 0 :(得分:1)
您应该创建一个app/views/users/_avatar.html.erb
部分,将问题中的代码移到那里,然后每次要渲染一个头像时,使用
<%= render 'users/avatar', user: post.user %>
答案 1 :(得分:0)
假设您正在使用CarrierWave或PaperClip,这些库具有默认/后备图像。对于fallback images in CarrierWave,您只需在与用户个人资料图片相关联的上传器中定义default_url
方法。
这不会像您在代码中那样实现HTML,但我认为它可以取代它。如果您真的想要代码中显示的HTML,我建议使用包含您的User对象的Presenter,如果不存在头像,则输出正确的HTML,可能是通过呈现部分,如建议的那样由@meagar。我的观点是:尝试通过调用对象上的方法来实现目标。通常应该有一种简单的方法来调用有问题的对象上的方法,并输出你需要的东西。