2009-07-01 13 views
0

Ich benutze Ruby on Rails und habe eine Tabelle, die ich sortieren möchte. Das Tablesorter jquery Plugin und es ist richtig in meine Dateien geladen. Ich habe jquery davor gut genannt. Ich habe diesen Code in meinem Javascript.Jquery Tablesorter in Rubin auf Schienen

$(document).ready(function(){ 
    $("#myTable").tablesorter({widgets: ['zebra']}); 
    $("#business").tablesorter({sortList: [[0,0], [1,0]]}); 
}); 

Ich habe 2 Tabellen. Ich habe meine Tabelle, die statisch ist, nur um zu sehen, ob der Code richtig funktioniert (und es tut). Ich kann sortieren, indem ich auf einen der Header klicke.

<table id="myTable"> 
    <thead> 
    <tr> 
     <th>Last Name</th> 
     <th>First Name</th> 
     <th>Email</th> 
     <th>Due</th> 
     <th>Web Site</th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr> 
     <td>Smith</td> 
     <td>John</td> 
     <td>[email protected]</td> 
     <td>$50.00</td> 
     <td>http://www.jsmith.com</td> 
    </tr> 
    <tr> 
     <td>Bach</td> 
     <td>Frank</td> 
     <td>[email protected]</td> 
     <td>$50.00</td> 
     <td>http://www.frank.com</td> 
    </tr> 
    <tr> 
     <td>Doe</td> 
     <td>Jason</td> 
     <td>[email protected]</td> 
     <td>$100.00</td> 
     <td>http://www.jdoe.com</td> 
    </tr> 
    <tr> 
     <td>Conway</td> 
     <td>Tim</td> 
     <td>tc[email protected]</td> 
     <td>$50.00</td> 
     <td>http://www.timconway.com</td> 
    </tr> 
    </tbody> 
</table> 

Aber ich habe auch meine andere Tabelle, die dynamisch aus einer Datenbank zieht. Was überhaupt nicht funktioniert und überhaupt nichts macht, wenn ich auf die Header klicke.

<table width="650" cellpadding="6" cellspacing="0" id="business"> 
    <thead> 
    <tr> 
     <th>Business Name</th> 
     <th>Address</th> 
     <th>Category</th> 
     <th>Description</th> 
    </tr> 
    </thead> 
    <% @businesses.each do |business|if !business.approved %> 
    <tbody> 
     <tr> 
     <td><a class="Contact<%=h business.id %>" href="#"><%=h business.name %></a></td> 
     <td><%=h business.address %></td> 
     <td><%=h business.business_category.name %></td> 
     <td><%=h business.description %></td> 
     </tr> 
    </tbody> 
    <% end %> 
</table> 

Jede Hilfe wäre großartig.

+1

Haben Sie das jemals gelöst? – Dsel

+0

Bitte zurück, was funktioniert hat. – DDDD

Antwort

0

Ich nehme an, Sie machen einen Ajax-Aufruf, um die dynamische Tabelle mit einer ID des Geschäfts anzufordern? Wenn dies der Fall ist, müssen Sie die Methode "tablesorter" aufrufen, wenn die Tabelle zum Dom hinzugefügt wurde, normalerweise innerhalb der Erfolgsmethode von .ajax. Wenn Sie zeigen könnten, wie Sie die & Einfügung der Geschäftstabelle anordnen, kann ich Ihnen helfen, weiter zu liefern.

+0

Ein Teil meines Codes wurde nicht angezeigt. Brauchst du das? – Mike

0

Nicht sicher, ob die wiederholten TBODY-Tags in der Ausgabe der problematischen Tabelle den Tablesorter verwirren.

1

Das Problem ist, dass Ihre TBODY Tags für jede Zeile ausgegeben werden, die falsche Syntax ist. Es sollte nur eine TBODY pro Tabelle sein. Der Code sollte wie folgt aussehen:

<tbody> 
    <% @businesses.each do |business|if !business.approved %> 
    <tr> 
     ... 
    </tr> 
    <% end %> 
</tbody> 

Edit (2015.05.13):

Bessere Syntax, um die Datenbank für relevante Ergebnisse, also nicht alle Ergebnisse abfragen würde und dann eine Bedingung durchführt, wie sie ursprünglich war angegeben.

<tbody> 
    <% @businesses.where(approved: false).each do |business| %> 
    <tr> 
     ... 
    </tr> 
    <% end %> 
</tbody> 

Best Practice würde die Abfrage im Modell UMFANG:

-umfang: not_approved, -> {where (genehmigt: false)}

und die Abfrage in der Steuerung durchführen:

@businesses = Business.not_approved 

und dann in der Ansicht, aufzuzählen, nur die Ergebnisse:

<% @businesses.each do |business| %> 
0

Dies löste auch genau das gleiche Problem wie mit Django. Durch das Verschieben von {% endfor%} in das Tag wurde das Problem gelöst