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

但这似乎不是最优的。如果我想在其他地方使用这个逻辑呢?我不想在我的视图中重复这段代码。

在我的应用程序的其他地方回收这些代码的最佳方法是什么?

谢谢!

偏导数

你应该创建一个app/views/users/_avatar.html.erb部分,在你的问题中移动代码,然后每次你想渲染一个角色,使用

<%= render 'users/avatar', user: post.user %>

假设您正在使用CarrierWave或PaperClip,这些库有默认/备用图像。对于CarrierWave中的回退图像,您只需在与用户配置文件图像相关的上传器上定义default_url方法。

这不能像你在代码中那样实现HTML,但我认为它可以取代它。如果你真的想要代码中显示的HTML,我建议使用一个包装你的User对象的Presenter,如果头像不存在,它会输出适当的HTML,也许通过渲染部分,如@meagar所建议的。我的观点是:尝试通过调用对象上的方法来实现您的目标。通常应该有一种足够简单的方法来调用对象上的方法,并让它输出所需的内容。

最新更新