2012-03-30 4 views
33

Ich versuche, eine Zeile in einem Tabellenlink zur Bearbeitungsseite zu machen. Ich weiß, dass die Links erstellt werden, weil ich sie ausdrucken kann. Ich bin nah dran, vermisse aber etwas Wichtiges. Was ändere ich, damit der Link ordnungsgemäß funktioniert?Erstellen einer Tabellenzeile in einen Link in Rails

<h1>Scouts</h1> 
<p><%= button_to "Add a new Scout", new_scout_path, :method => :get %></p> 
<div class="message-board"> 
    <table> 
    <tr> 
     <th>Name</th> 
     <th>Rank</th> 
     <th>Advancement Date</th> 
     <th>Age</th> 
    </tr> 

<% @scouts.each do |scout| %> 
    <tr <% link_to edit_scout_path(scout) %> > 
     <td><%= scout.name %></td> 
     <td><%= scout.rank %></td> 
     <td><%= scout.advancement %></td> 
     <td><%= scout.age %></td> 
    </tr> 
<% end %> 
    </table> 
</div> 
+0

Sie können auch onlick = location.href = 'PATH' im tr-Tag verwenden. Ich musste ein paar hässliche Formatierungen in einigen erb-Tags machen, aber es funktioniert perfekt. – jhamm

Antwort

62

Wie Robin sagte, das ist ungültige HTML. Das solltest du wahrscheinlich nicht tun.

Ich persönlich würde eine onclick Ereignis auf die tr mit jQuery setzen. Das tr Element würde wie folgt aussehen:

<tr data-link="<%= edit_scout_path(scout) %>"> 
    ... 
</tr> 

Und dann das zugehörige JavaScript (in einer Datei wie app/assets/javascripts/scouts.js platziert) so etwas wie dies würde:

$("tr[data-link]").click(function() { 
    window.location = $(this).data("link") 
}) 

Dies würde alle tr Elemente machen, die haben Ein data-link Attribut verhält sich so, als wären es URLs auf die unaufdringlichste Art und Weise, die ich für möglich halte.

+1

Ich verstehe die Art und Weise, wie ich damit umgehe, aber warum sollten wir das nicht durch Schienen handhaben und keine js einziehen? – jhamm

+11

Mit Rails 3.2.3 und jquery-rails 2.0.2 habe ich die Meldung "this.data is not a function" erhalten. Das Ändern der jQuery-Funktionsinhalte in 'window.location = this.dataset.link' hat funktioniert. –

+1

Was ist, wenn es eine Schaltfläche oder einen Link in derselben Zeile gibt, auf die wir diese Logik nicht anwenden möchten? Ich kämpfe jetzt ziemlich viel damit. – jwg2s

0

Sie könnten die Verwendung der Antwort hier Problem using elem.dataset with IE and JSFiddle in Erwägung ziehen, da this.dataset.link in IE9 nicht funktioniert.

+3

Während dies theoretisch die Frage beantworten könnte, [wäre es vorzuziehen] (http://meta.stackexchange.com/q/8259), die wesentlichen Teile der Antwort hier aufzunehmen , und stellen Sie den Link als Referenz bereit. – Spontifixus

5

Ich bin neu auf Schienen, und ich habe das gleiche Problem und die Beratung Ryan verwenden mit einigen Änderungen, die folgen -

$("tr").click(function() { window.location = $(this).data("link") })

Sie haben $ (this) zu verwenden.

+0

Wenn Sie ajax partielle Renderings verwenden, verwenden Sie zusätzlich **. On ('click', function() {...}); ** stattdessen ... – Gobol

+0

Wie können Sie den Link unten links sichtbar machen? Soweit ich weiß, macht es dem Crawler schwer, die angegebene Site zu finden. –

+0

Sie können CSS auf diesem Link hinzufügen, so dass es leicht sichtbar ist. Ändern Sie die Farbe des Links oder etwas. –

Verwandte Themen