将表合并到单个表

时间:2013-03-06 14:13:02

标签: html css ruby-on-rails ruby-on-rails-3 erb

相关摘要

Show.html.erb

<% outbound_messages.each do |outbound_message| %>
        <h5>Outbound Message</h5>
        <%= render "trace/display_tabular_data", :data => outbound_message %>
    <% end %> 

Display_tabular_data.html.erb

<table border="1px solid black">
  <thead>
  <tr>
    <%data.each do |key,value|%>
        <th><%=key.capitalize%></th>
    <%end%>
  </tr></thead><tr>
  <%data.each do |key,value|%>
      <td><%=value%></td>
  <%end%>
</tr>
</table>

所以会发生的是每一行数据都打印在一个唯一的表中。 所以有一个类似于http://imgur.com/1gskRvX

的东西

但显然,更好的结果将是单一表格(期望结果)

Outbound Message
Message ID, Exchange, Relayed
Row1
Row2
Row3
Row4
...
....

我有什么想法可以解决这个问题? Display_tabular_data在show.html.erb的不同位置被调用至少15次,因此如果仅通过display_tabular_data而不是show.html.erb进行更改,以某种方式获得最终结果会更容易。如果不可能,请给我最好的方式?

2 个答案:

答案 0 :(得分:1)

如果你不想为每个对象渲染一个单独的表,那么在show.html.erb中如何做这样的事情:

<% unless outbound_messages.empty? %>
  <%= render 'trace/display_tabular_data', :data => outbound_messages %>
<% end %>

然后在部分:

<h5>Outbound Messages</h5>

<table border="1px solid black">
  <thead>
  <tr>
    <% data.first.each do |key,value| %>
      <th><%=key.capitalize%></th>
    <% end %>
  </tr>
  </thead>

  <% data.each do |outbound_message| %>
    <tr>
    <% outbound_message.each do |key,value|%>
        <td><%=value%></td>
    <% end %>
    </tr>
</table>

只有在您确信每个outbound_message都具有相同的密钥集时才会有效。

答案 1 :(得分:0)

你去..

<% if outbound_messages.count > 0 %>
  <h5>Outbound Message</h5>
    <table border="1px solid black">
      <thead>
        <tr>
        <td>Message ID</td>
        <td>Exchange</td>
        <td>Relayed</td>
      </tr>
      </thead>
      <% outbound_messages.each do |outbound_message| %>
        <tr>
          <td>
            <%= outbound_message[:message_id] %>
          </td>
          <td>
            <%= outbound_message[:exchange] %>
          </td>
          <td>
            <%= outbound_message[:relayed] %>
          </td>
        </tr>
      <% end %> 
    </table>
<% end %>

你可以完全消除部分