在Rails 4应用程序中重用条件逻辑的最佳方法是什么?

时间:2015-07-16 19:42:50

标签: ruby-on-rails ruby-on-rails-4

我的目标是显示用户的个人资料图片。有些用户不会上传个人资料图片,因此我想为他们显示默认个人资料图片。

我可以在这样的视图中执行此操作:

    <% 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 %>

但这似乎不是最佳的。如果我想在其他地方使用逻辑怎么办?我不想在我的观点中重复这段代码。

在我的应用中的其他位置回收此代码的最佳方法是什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

Partials

您应该创建一个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。我的观点是:尝试通过调用对象上的方法来实现目标。通常应该有一种简单的方法来调用有问题的对象上的方法,并输出你需要的东西。