Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

table_for with no items displays "[]" #1016

Closed
djwonk opened this Issue · 12 comments

6 participants

@djwonk

In a show page for one object, where a table_for is used to display associated items, it displays "[]" instead of just making an empty table.

Source code example, in my cases.rb file:

ActiveAdmin.register Case do

# ...

panel "Notes" do
  table_for(c.case_notes) do |t|
    t.column("Note ID", :id) do |case_note|
      link_to(case_note.pretty_id, admin_case_note_path(case_note))
    end
    t.column("Contact ID") do |case_note|
      contact = case_note.contact
      if contact
        link_to(contact.pretty_id, admin_contact_path(contact))
      else
        "n/a"
      end
    end
    # ...
@djwonk

The associated html is:

       <div class="panel">
          <h3>Notes</h3>
          <div class="panel_contents">
            <table border="0" cellspacing="0" cellpadding="0">
              <thead>
                <tr>
                  <th class="">Note ID</th>
                  <th class="">Contact ID</th>
                  <th class="">CSR</th>
                  <th class="note">Note</th>
                </tr>
              </thead>
              <tbody>[]</tbody>
            </table>
          </div>
        </div>
@djwonk

I hacked out the offending stray text using jQuery:

$(document).ready(function() {
  var panel = $('div.panel_contents');
  panel.each(function(index) {
    var contents = $(this).contents();
    var shady = $(contents[0]);
    shady.detach();
  });
});
@gregbell gregbell was assigned
@gregbell
Owner

What version of active admin are you using? I can't seem to replicate it on master.

@pwightman

For what it's worth, I'm experiencing this same issue on 0.3.4: http://cl.ly/1G151a2W2B1m3W0W0v0h

@djwonk
@djwonk

I tried setting my Gemfile to point to the github version of activeadmin. This didn't solve the problem.

Can you point me to the code that I should examine more closely? I don't mind digging in, but a few pointers would help.

@latortuga

@djwonk I tried looking into this a bit and couldn't figure it out on first walkthrough. The code in question can be found here https://github.com/gregbell/active_admin/blob/master/lib/active_admin/views/components/table_for.rb

You also might want to look in the arbre directory as that's where the HTML is mainly generated (https://github.com/gregbell/active_admin/tree/master/lib/active_admin/arbre)

My suspicion is that it has to do with default return values from some of the functions as otherwise why would a blank array show up? As an initial idea, perhaps the call to build_table should not be performed if the collection is empty.

I've had this problem on 0.3.4 and 0.4.0.

@pcreux
Collaborator

This happens on ruby 1.9 only because [].to_s returns "[]" on 1.9.

@jancel

This is fixed in master. Slated for 0.4.2.

@djwonk

Thanks for fixing this!

I just want to mention that the behavior difference isn't just for []. It applies to all arrays.

In Ruby 1.8.7:

[1,2,3].to_s #=> "123"

In Ruby 1.9.3:

[1,2,3].to_s #=> "[1, 2, 3]"

Hopefully the code takes this into account.

@jancel

Change only affects empty arrays. Arrays should work the same as they always have.

@pcreux
Collaborator

Closed by 2d70197

@pcreux pcreux closed this
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.