使用Rails计数器渲染集合中的部分

时间:2011-09-28 22:02:49

标签: ruby-on-rails-3

我在集合中渲染部分:

<%= render :partial => 'superlative', :collection => @profile.superlatives, :locals => {:superlative_count => @profile.superlatives.length} %>

这是部分:

<li class="superlative"><span title="<%= superlative.name %>">
  <%= superlative.body %>
</span></li>

我想渲染集合,以便:

  • 除了最后一个项目之外的每个项目都以最后的逗号和空格呈现
  • 最后一项以and
  • 开头

这样整个集合就像这样:身体,身体,身体和身体

我有一些使用下面的代码,但无法正确的间距。有人可以帮忙吗?也许还有一种更简单的方法吗?谢谢!

<% if superlative_counter + 1 == superlative_count %>
<li class="superlative"><span title="<%= superlative.name %>">
  <%= "and #{superlative.body}" %>
</span></li>
<% else %>
<li class="superlative"><span title="<%= superlative.name %>">
  <%= "#{superlative.body}," %>
</span></li>
<% end %>

1 个答案:

答案 0 :(得分:1)

我觉得有另一种方法可以做到这一点。使用CSS伪元素,您只需插入逗号和“和”即可。 Take a look in this fiddle。这里的主要警告是,至少在某些浏览器中,如果有人复制并粘贴列表,则不会包含伪元素的内容(即使他们看到“foo bar baz”,即使他们看到“foo,bar”和巴兹。“

假设您想在Ruby中执行此操作,您看到的间距问题是什么?我假设您使用CSS将<ul>转换为句子 - 您是否需要将每个单词放在<li>内?你的代码看起来不错,但我可能会想要通过移动那些逗号和'并在<span>s之外来调整它:

<% if superlative_counter + 1 == superlative_count %>
  <li class="superlative">
    and <span title="<%= superlative.name %>"><%= superlative.body %></span>
  </li>
<% else %>
  <li class="superlative">
    <span title="<%= superlative.name %>"><%= superlative.body %></span>,&nbsp;
  </li>
<% end %>

...但我不确定这会对间距问题产生任何影响。