使用控制器来管理渲染逻辑而不是视图

时间:2015-05-28 20:27:18

标签: html ruby-on-rails controller

我不是要求代码作为答案,而是要求资源或一些一般性指导。

我有一个用户的索引页面。对于每个用户,我检查朋友状态"每个用户相对于当前用户的权限。你可以想象,在视图页面中它是一个非常冗长的if和elsif语句..这基本上是:

<% if current_user %>
    <% if current_user.friend_with? profile.user %>
        <span class="glyphicon glyphicon-user"></span>
    <% elsif current_user.invited_by? profile.user %>
        <%= link_to '.', friendship_path(profile.user), :method => "put", :class => "glyphicon glyphicon-check" %>
    <% elsif current_user.connected_with? profile.user %>
        <span class="glyphicon glyphicon-send" title="Pending approval"></span>
    <% elsif current_user == profile.user %>
        <span class="glyphicon glyphicon-user"></span>
    <% else %>
        <%= link_to '.', friendships_path(:user_id => profile), :method => "post", :class => "glyphicon glyphicon-plus" %>

我在视图页面中有这个完整的逻辑,而且非常麻烦。我想将它清理干净并将其藏在控制器中(如果可取的话)。

任何指导都会非常感激。我想有一个方法来返回图标类型或呈现某种类型的HTML代码并将其传递到视图中。谢谢!

2 个答案:

答案 0 :(得分:0)

辅助方法就是答案..

在帮助器中以某种方式移动它,如

def my_awesome_helper_method
- logic -
end

并在视图中调用

<%=my_awesome_helper_method %>
更干净......!

答案 1 :(得分:0)

您应该查看https://stackoverflow.com/a/7860493/1657377,这里可能包含演示者或装饰者模式。但这种逻辑肯定不属于控制器。