我有类似的东西:
<%= @votes %>
只输出一个字符串,如:
123
是否有一种简单的方法可以用一个带帮助的html包装每个字符?
<span class="outerclass">
<span class="innerclass">
1
</span>
</span>
<span class="outerclass">
<span class="innerclass">
2
</span>
</span>
<span class="outerclass">
<span class="innerclass">
3
</span>
</span>
答案 0 :(得分:2)
您可以创建一个类似于此的帮助程序:
def wrap_each_char(string, &block)
string.each_char.map(&block).join
end
然后像这样使用它(erb):
<%- @votes = "123" -%>
<%- wrap_each_char(@votes) do |c| -%>
<span class="outer"><span class="inner"><%= c %></span></span>
<%- end -%>
更新:以上示例表示将块级内容传递给帮助程序的一种方法,但值得注意的是,只需使用each_char
方法就可以简化此特定示例字符串并完全避免帮助:
<%- @votes.each_char do |c| -%>
<span class="outer"><span class="inner"><%= c %></span></span>
<%- end -%>
答案 1 :(得分:2)
视图:
<% @votes.split('').each do |v| %>
<%= print_vote(v) %>
<% end %>
助手:
def print_vote(vote)
content_tag(:span, :class => 'outerclass') do
content_tag(:span, vote, :class => 'innerclass')
end
end
我会在他们点击视图之前对阵列进行排序,但是你将不得不在某个地方进行迭代,并且拆分实际上并没有给实现增加太多。我想如果你真的想把所有内容都包含在帮助器里,你可以做类似
的事情视图:
<%= print_votes(@votes) %>
助手:
def print_votes(votes)
votes.split('').each do |vote|
content_tag(:span, :class => 'outerclass') do
content_tag(:span, vote, :class => 'innerclass')
end
end
end
几乎相同,它只取决于你想要放置线条的位置。
答案 2 :(得分:1)
# View
<%= char_classes(@votes) %>
# Helper
def char_classes(string)
string.split.map { |char| '<span class="outerclass"><span class="innerclass">' + char + '</span></span>'}.join
end
您可能想要选择更具表现力的方法/ var名称......