繁体   English   中英

Rails:将每个字符拆分并包装成字符串?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM