2016-12-29 11 views
0

Я пытаюсь отобразить таблицу, чьи столбцы являются заголовками subreddit и имеет ссылки на каждый субредактор. Однако это не создает ссылку. Я хочу сделать всю строку ссылкой, а не конкретной ячейкой. В чем проблема?link_to блокировать внутри каждого цикла do не работает

<% @subreddits.each do |subreddit| %> 
     <tr> 
     <%= link_to subreddit do %> 
      <td><%= something else %></td> 
      <td><%= subreddit.title %></td> 
     <% end %> 
     </tr> 
    <% end %> 
+0

Вы оберточной ссылку _around_ в '' элемента . Оберните '' по ссылке. –

+0

Я хочу, чтобы вся ячейка была ссылкой. Обновлено описание, чтобы уточнить это! – alpaca

+0

@alpaca HTML этого не делает. http://stackoverflow.com/questions/10070232/how-to-make-a-cell-of-table-hyperlink – coreyward

ответ

4

Вы оберточной ссылку вокруг<td> элемента. Оберните <td> по ссылке.

<% @subreddits.each do |subreddit| %> 
    <tr> 
    <td> 
     <%= link_to(subreddit.title, subreddit) %> 
    </td> 
    </tr> 
<% end %> 

Если Вы желаете сделать весь<td> ссылку, вы должны будете использовать код выше плюс что-то вроде этого:

https://stackoverflow.com/a/6459846/2456549


Обновление

Похоже, вы обновили свой вопрос, чтобы добавить дополнительные <td> s. Похоже, теперь вы хотите сделать свою ссылку <tr>. Лучший способ добиться этого - возможно, просто использовать JavaScript. См. Ссылку ниже для решения. Я бы добавил CSS, так что <tr> имеет заостренный курсор для улучшения UX.

how to make a whole row in a table clickable as a link?


Я пошел вперед и добавил полное решение здесь, без необходимости зависимостей, таких как JQuery, как должное, это написано в ES6, поэтому изменить const к var, если вам нужно. Обратите внимание, что он не был протестирован.

# ERB 
<tr class="cursor-pointer" 
    data-behavior="clickable-row" 
    data-url="<%= subreddit_url(subreddit) %>"> 
    <td><%= something else %></td> 
    <td><%= subreddit.title %></td> 
</tr> 

# javascript 
const clickableRows = document.querySelectorAll('[data-behavior=clickable-row]'); 

clickableRows.addEventListener('click', event => { 
    window.location = event.currentTarget.dataset.url; 
}); 

# css 
.cursor-pointer { cursor: pointer; }