我是一名初级开发人员,我读了很多关于这个主题的文章,但没有人非常清楚你是否可以在视图中使用逻辑。
我知道不应该使用复杂的逻辑,但我想知道是否可以使用可以被视为视图相关逻辑的东西。我所说的大致是:
<%=image_tag(group.icon.url, alt: 'Image', class: 'profile-image', id: 'target') if group.icon?%
或者可以使用类似的东西。
<% if logged_in? %>
<div class="user-avatar d-flex align-items-center flex-column">
<%=image_tag(current_user.avatar.url, alt: 'Image', 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", alt: "Groups", 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%>
这可以使用分部和呈现分部的辅助方法来解决,但在我看来,这会使任何试图理解代码的人都更难理解视图。它还创建了一个只使用一次的新分部。此外,如果你的应用程序中有更多这样的案例,那么你就必须创建更多的辅助方法和部分。
如果你密切关注,
<%=image_tag(current_user.avatar.url, alt: 'Image', class: "avatar-icon") if current_user.avatar?%>
<%=image_tag(group.icon.url, alt: 'Image', class: 'profile-image', id: 'target') if group.icon?%
你意识到,这些方法是相似的,但并不相同。因此,在这种情况下,创建2个辅助方法很容易,或者创建一个允许开发人员通过参数构建所需img_tag
的方法,但这两种解决方案似乎都比仅使用内联if
语句更麻烦。
我想确切地知道,在观点上建立与观点相关的逻辑是否被认为是一种好的做法,如果是的话,逻辑的类型和程度是什么。如能就这一问题提供任何资源,我们将不胜感激。
您能在视图中使用逻辑吗?轨道
可以但是您应该避免使用复杂的逻辑和ActiveRecord之类的东西如果其他都可以,则很简单。
使用助手谈论DRYing图像标签:
<%=image_tag(current_user.avatar.url, alt: 'Image', class: "avatar-icon") if current_user.avatar?%>
<%=image_tag(group.icon.url, alt: 'Image', class: 'profile-image', id: 'target') if group.icon?%
如果你检查实际上只有一个相似性alt: 'Image'
,甚至你可能想把它改成其他有意义的alt值,比如"头像"或"群组图标">
因此,在这个特定的场景中,编写helper方法并没有增加太多价值。