[英]Rails: Split and wrap each character in a string?
我有类似的东西:
<%= @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>
您可以创建类似于以下内容的帮助程序:
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 -%>
视图:
<% @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
几乎相同,仅取决于您要放置线条的位置。
# View
<%= char_classes(@votes) %>
# Helper
def char_classes(string)
string.split.map { |char| '<span class="outerclass"><span class="innerclass">' + char + '</span></span>'}.join
end
您可能想要选择更具表现力的方法/变量名...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.