Превращение строки таблицы в ссылку в Rails - PullRequest
36 голосов
/ 30 марта 2012

Я пытаюсь сделать строку в таблице ссылкой на страницу редактирования. Я знаю, что ссылки создаются, потому что я могу их распечатать. Я близко, но мне не хватает чего-то важного. Что я могу изменить, чтобы ссылка работала правильно?

<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>

Ответы [ 3 ]

66 голосов
/ 30 марта 2012

Как сказал Робин, это неверный HTML. Вы, вероятно, не должны этого делать.

Лично я бы поместил событие onclick на tr, используя jQuery. Элемент tr будет выглядеть так:

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

И тогда связанный JavaScript (помещенный в файл, такой как app/assets/javascripts/scouts.js) будет выглядеть примерно так:

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

Это приведет к тому, что все элементы tr, имеющие атрибут data-link, будут действовать так, как если бы они были URL-адресами самым ненавязчивым способом, который я считаю возможным.

5 голосов
/ 20 июля 2015

Я новичок на рельсах, и у меня та же проблема, и я использую совет Райана с некоторыми изменениями, которые следуют -

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

Вы должны использовать $ (это).

0 голосов
/ 14 мая 2019

Вот мое мнение, чтобы сделать эти ссылки, remote: true

$("tr[data-link]").click(function () {
    $.ajax({
        url: this.getAttribute('data-link'),
        dataType: "script",
        type: "GET"
    });
    event.preventDefault();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...