我想知道是否可以清理或重新组织我的视图,以便减少Ruby代码。 HTML经常变得很麻烦,因为它有很多Ruby代码。
我考虑将所有Ruby内容移动到帮助程序中,并将每个函数(链接,标记等)分配给方法。
实施例。布局更复杂,问题变得更糟。
<div class="sidebar">
<div id="art_nav">
<%= link_to "Previous", art_path(@previous), :remote => true, :class => "prev" unless @previous.nil? %>
<%= link_to "Next", art_path(@next), :remote => true, :class => "next" unless @next.nil? %>
</div>
</div>
会变成:
<div class="sidebar">
<div id="art_nav">
<%= link_to_previous %>
<%= link_to_next %>
</div>
</div>
助手:
def link_to_previous
link_to "Previous", art_path(@previous), :remote => true, :class => "prev" unless @previous.nil?
end
def link_to_next
link_to "Next", art_path(@next), :remote => true, :class => "next" unless @next.nil?
end
这似乎适用于简单的例子..但我想知道当我必须做循环或类似时我应该如何组织。
更新:已添加循环示例
<% arts.each do |art| %>
<h3><%= art_title %></h3>
<p><%= art_description %></p>
<div id="comments_<%= art.id %>">
<%= render :partial => "/comments/index", :locals => {:resource => art} %>
</div>
</div>
<% end %>
你会做什么?
答案 0 :(得分:0)
以下是您可以在代码中使用的模式,以便进一步清理它:
def menu(*options, &block)
params = options[0]
active = (params[:active] if params) || false
first = (params[:first] if params) || false
"
<div class=\"menu\">
<div class=\"menu-left #{active ? "active" : "inactive"} #{first ? "first" : "not-first"}\">
</div>
<div class=\"menu-center\">
<div class=\"menu-content #{active ? "active" : "inactive"}\">
#{capture(&block)}
</div>
</div>
<div class=\"menu-right #{active ? "active" : "inactive"}\">
</div>
</div>
".html_safe
end
使用这个助手,代码变得非常简单:
<%= menu(:active => @active_menu == :menu1 ? true : false, :first => true) do %>
<%= link_to "Les produits et les prix", menu1_path %>
<% end %>
在这种模式的中心,有一个电话
#{capture(&block)}
很抱歉这个例子根本不是“通用的”,我从我自己的代码中复制并粘贴了。但我相信你明白了。