在erb中为列表创建字母编号?

时间:2014-05-23 15:17:11

标签: ruby-on-rails loops html-lists erb

我想按字母顺序在答案旁边写一个字母。

像这样:

a. answer one
b. answer two
c. answer three

依旧......

这就是我的尝试,但如果有答案,我无法弄清楚如何只写这封信。

<% @a = ("a".."z").to_a %>
<% question.answers.each do |answer| %>
  <tr>
    <% if answer %>
    <% @a.each do |letter| %>
      <td><% letter %></td>
    <% end %>
  <% end %>
  <td><%= answer.option %></td>
  </tr>
<% end %>

2 个答案:

答案 0 :(得分:3)

您应该考虑使用内置的html listing functionality

<ol style="list-style-type: lower-alpha">
  <li>Coffee</li>
  <li>Tea</li>
  <li>Milk</li>
</ol>

将显示为:

a. Coffee
b. Tea
c. Milk

答案 1 :(得分:2)

您可以使用each_with_index,它还会将数组中当前对象的索引传递给块。这意味着第一个答案将包含i == 0,第二个答案将包含i == 1等。

@a也是一个数组,其中包含字母,因此在0位置有字母"a"1 - "b",等

现在你要做的就是在位置i的答案前打印位置i的字母:

<% @a = ("a".."z").to_a %>
<% question.answers.each_with_index do |answer, i| %>
  <tr>
    <% if answer %>
      <td><%= @a[i] %></td>
    <% end %>
  <td><%= answer.option %></td>
  </tr>
<% end %>

顺便说一下,if是多余的,或者您必须将answer.option放入其中 - 否则您将尝试在.option上致电nil ...

<% @a = ("a".."z").to_a %>
<% question.answers.each_with_index do |answer, i| %>
  <tr>
    <% if answer %>
      <td><%= @a[i] %></td>

      <td><%= answer.option %></td>
    <% end %>
  </tr>
<% end %>