rigelstpierre
rigelstpierre

Reputation: 544

Rails Array to HTML Table

I have an array coming from a rails app, and I'm getting the following array.

[
  #<InvoiceDetail id: 66018858, invoice_id: 108855, package_id: 21008265, tracking_num: "1Z1Y81420342195332", base_charge: #<BigDecimal:7fed215e7188,'0.857E1',18(18)>, discount: #<BigDecimal:7fed215e70e8,'-0.308E1',18(18)>, created_at: "2012-07-30 15:33:43", updated_at: "2013-02-27 15:31:16", type_id: 54, transaction_date: "2012-07-23", gl_code: nil, division: nil>,
  #<InvoiceDetail id: 66018912, invoice_id: 108855, package_id: 21008282, tracking_num: "1Z1Y81420341336904", base_charge: #<BigDecimal:7fed215e5e78,'0.823E1',18(18)>, discount: #<BigDecimal:7fed215e5d88,'-0.274E1',18(18)>, created_at: "2012-07-30 15:33:44", updated_at: "2013-02-27 15:31:16", type_id: 54, transaction_date: "2012-07-23", gl_code: nil, division: nil>,
  #<InvoiceDetail id: 66019132, invoice_id: 108855, package_id: 21008350, tracking_num: "1Z1Y81420340443595", base_charge: #<BigDecimal:7fed215e4988,'0.995E1',18(18)>, discount: #<BigDecimal:7fed215e48e8,'-0.428E1',18(18)>, created_at: "2012-07-30 15:33:46", updated_at: "2013-02-27 15:31:16", type_id: 54, transaction_date: "2012-07-24", gl_code: nil, division: nil>,
  #<InvoiceDetail id: 66019370, invoice_id: 108855, package_id: 21008425, tracking_num: "1Z1Y81420341794357", base_charge: #<BigDecimal:7fed215ef608,'0.904E1',18(18)>, discount: #<BigDecimal:7fed215ef568,'-0.355E1',18(18)>, created_at: "2012-07-30 15:33:48", updated_at: "2013-02-27 15:31:16", type_id: 54, transaction_date: "2012-07-26", gl_code: nil, division: nil>,
  #<InvoiceDetail id: 66018877, invoice_id: 108855, package_id: 21008271, tracking_num: "1Z1Y81420341786795", base_charge: #<BigDecimal:7fed215ee208,'0.736E1',18(18)>, discount: #<BigDecimal:7fed215ee118,'-0.187E1',18(18)>, created_at: "2012-07-30 15:33:43", updated_at: "2013-02-27 15:31:16", type_id: 54, transaction_date: "2012-07-23", gl_code: nil, division: nil>,
  #<InvoiceDetail id: 66018894, invoice_id: 108855, package_id: 21008276, tracking_num: "1Z1Y81420341777849", base_charge: #<BigDecimal:7fed215ecd18,'0.823E1',18(18)>, discount: #<BigDecimal:7fed215ecc78,'-0.274E1',18(18)>, created_at: "2012-07-30 15:33:44", updated_at: "2013-02-27 15:31:16", type_id: 54, transaction_date: "2012-07-23", gl_code: nil, division: nil>
]

I'm looking to parse out that data into a html table. Still pretty new with Rails and not sure where to start on this one.

Edit:

Here is what I'd like the the table to take a look like.

       <table class="table table-condensed">
          <thead>
            <tr>
              <th>Invoice Id</th>
              <th>Package Id</th>
              <th>Tracking Number</th>
              <th>Base Charge</th>
              <th>Discount</th>
              <th>Type Id</th>
              <th>Transaction Date</th>
              <th>Gl Code</th>
              <th>Division</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>108855</td>
              <td>21008265</td>
              <td>1Z1Y81420342195332</td>
              <td>8</td>
              <td>-3</td>
              <td>54</td>
              <td>2012-07-23</td>
              <td>nil</td>
              <td>nil</td>
            </tr>
          </tbody>
        </table>

Upvotes: 0

Views: 2367

Answers (3)

AKovtunov
AKovtunov

Reputation: 577

Also, if you are new with Rails, you can make scaffold and look, how they did view files.

Upvotes: 0

fotanus
fotanus

Reputation: 20106

For a generic list of the same objects, you can go with something like (not tested)

<table>
  <thead>
    <tr>
      <% @array.first.attributes.each do |attr| %>
        <th><%= attr.titlelize %></th>
      <% end %>
    </tr>
  </thead>
  <tbody>
    <% @array.each do |x| %>
      <tr>
        <% x.attributes.each do |attr| %>
          <td><%= x[attr] %></td>
        <% end %>
      </tr>
    <% end %>
  </tbody>
</table>

Or simple use datagrid gem

ps.: I wrote this answer before the user give an example of how he wanted his table to look like. For that exact table, check @ankita answer.

Upvotes: 5

user2340027
user2340027

Reputation:

fotanus' answer is correct. But if you want the columns to be in particular order, use this

<table class="table table-condensed">
      <thead>
        <tr>
          <th>Invoice Id</th>
          <th>Package Id</th>
          <th>Tracking Number</th>
          <th>Base Charge</th>
          <th>Discount</th>
          <th>Type Id</th>
          <th>Transaction Date</th>
          <th>Gl Code</th>
          <th>Division</th>
        </tr>
      </thead>
      <tbody>
        <% @invoice_details.each do |invoice_detail| %>
          <tr>
            <td><%= invoice_detail.id %></td>
            <td><%= invoice_detail.package_id %></td>
            <td><%= invoice_detail.tracking_number %></td>
            <td><%= invoice_detail.base_charge %></td>
            <td><%= invoice_detail.discount %></td>
            <td><%= invoice_detail.type_id %></td>
            <td><%= invoice_detail.transaction_date %></td>
            <td><%= invoice_detail.gl_code %></td>
            <td><%= invoice_detail.division %></td>
          </tr>
        <% end %>
      </tbody>
    </table>

Note: Column names were assumed.

Upvotes: 4

Related Questions