Rails: разделить и обернуть каждый символ в строку? - PullRequest
1 голос
/ 25 января 2010

У меня есть что-то вроде:

<%= @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>

Ответы [ 3 ]

2 голосов
/ 25 января 2010

Вы можете создать помощника, подобного этому:

def wrap_each_char(string, &block)
  string.each_char.map(&block).join
end

Тогда используйте это так (эрб):

<%- @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 -%>
2 голосов
/ 25 января 2010

вид:

<% @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

Примерно так же, это зависит только от того, куда вы хотите поместить свои строки.

1 голос
/ 25 января 2010
# View
<%= char_classes(@votes) %>

# Helper
def char_classes(string)
  string.split.map { |char| '<span class="outerclass"><span class="innerclass">' + char + '</span></span>'}.join
end

Возможно, вы захотите выбрать более выразительные имена методов / переменных ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...