您可以在视图中使用逻辑吗?滑轨

问题描述

我是一名初学者,并且我已经阅读了很多有关该主题的文章,但是没人知道您是否可以在视图中使用逻辑。

我知道不应使用复杂的逻辑,但我想知道是否可以使用可以视为与视图相关的逻辑的东西。我正在谈论一些与此类似的东西:

row_number()

或者也许可以使用类似的东西。

<%=image_tag(group.icon.url,alt: 'Image',class: 'profile-image',id: 'target') if group.icon?%

这可以通过使用partial和helper方法来解决,该方法可以渲染partial,但是我认为这会使试图理解该代码的人更加看不懂。它还创建了一个新的部分,将只使用一次。另外,如果您的应用中有更多类似的情况,那么您将不得不创建更多的辅助方法和局部函数。

如果您密切关注,

 <% if logged_in? %>
    <div class="user-avatar d-flex align-items-center flex-column">
        <%=image_tag(current_user.avatar.url,class: "avatar-icon") if current_user.avatar?%>
        <h3><%=current_user.name%></h3>
    </div>

    <li class="d-flex menu">
        <div class="icons"><%= image_tag "icons/log_in.svg",alt: "Groups",class: "icons"%></div>
        <div class="d-flex flex-column justify-content-center pl-2">
            <%=link_to "Profile",user_path(current_user),class: "link" %></div>
    </li>
    <li class="d-flex menu">
        <div class="icons"><%= image_tag "icons/time.svg",class: "icons"%></div>
        <div class="d-flex flex-column justify-content-center pl-2">
            <%=link_to "My Group Transactions",user_times_path(current_user),class: "link" %></div>
    </li>
<%end%>

您意识到,这些是相似的方法,但并不相同。因此,在这种情况下,很容易创建2个辅助方法,或者可能创建允许开发人员通过参数构建所需的<%=image_tag(current_user.avatar.url,class: "avatar-icon") if current_user.avatar?%> <%=image_tag(group.icon.url,id: 'target') if group.icon?% 的方法,但是这两种解决方案似乎都比仅使用内联{{1} }。

我想确切地知道在视图上具有与视图相关的逻辑,如果是哪种类型以及在什么程度上,是否被认为是一种好习惯。任何有关该主题的资源将不胜感激。

解决方法

您可以在视图中使用逻辑吗?导轨

是的,可以。 但是您应该避免使用复杂的逻辑和ActiveRecord。 简单的if-else很好。

谈论使用助手干燥图像标签:

<%=image_tag(current_user.avatar.url,alt: 'Image',class: "avatar-icon") if current_user.avatar?%>
<%=image_tag(group.icon.url,class: 'profile-image',id: 'target') if group.icon?%

如果您实际上只检查了一个相似性alt: 'Image',甚至您可能希望将其更改为其他一些有意义的alt值,例如'avatar'或'group icon'。
因此,在这种特殊情况下,编写辅助方法不会增加太多价值。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...