Как мне обернуть link_to некоторый HTML-код Ruby?

116

Как обернуть ссылку вокруг кода просмотра? Я не могу понять, как передать несколько строк кода Ruby одному link_toметоду. Результат, который я ищу, заключается в том, что вы щелкаете столбец и получаете страницу шоу:

<div class="subcolumns">
  <div class="c25l">
        <div class="subcl">
        <%= image_tag album.photo.media.url(:thumb), :class => "image" rescue nil  %>
        </div>
    </div>
  <div class="c75r">
        <div class="subcr">
            <p><%= album.created_at %></p>
            <%= link_to h(album.title), album %>
            <p><%= album.created_at %></p>
            <p><%= album.photo_count %></p>
        </div>
  </div>
</div>
atmorell
источник

Ответы:

271

link_to принимает блок кода (> = Rails 2.2), который будет использовать в качестве тела тега.

Итак, вы делаете

<%= link_to(@album) do %>
  html-code-here
<% end %>

Но я совершенно уверен, что вставлять divвнутри aтега недопустимый HTML.

РЕДАКТИРОВАТЬ: добавлен =персонаж в соответствии с комментарием Амина Арианы ниже.

Турбьёрн Хермансен
источник
17
Этот комментарий является просто ссылкой: <a> <div> </div> </a> действителен в HTML5, но не в более ранних спецификациях HTML. См. Stackoverflow.com/questions/796087/make-a-div-into-a-link для аналогичного вопроса.
chucknelson
Rails 2.3.8 по-прежнему получает «синтаксическую ошибку, непредвиденную ')'» с использованием указанного выше синтаксиса.
daedelus_j
Если у вас более сложный путь, вы можете просто добавить параметры, пропуская исходное содержимое, например, <% = link_to some_path, method:: post%>
Obromios
13

Кроме того, это может быть проблемой для некоторых:

Обязательно напишите, <%=если вы делаете простую ссылку с кодом вместо <%.

например

<%= link_to 'some_controller_name/some_get_request' do %>
  Hello World
<% end  %>
sybohy
источник
Я думаю, что это требуется в Rails 3+
m33lky 02
8

Для более старых версий Rails вы можете использовать

<% content_tag(:a, :href => foo_path) do %>
  <span>Foo</span>
<% end %>
Омар Куреши
источник
6

Вы можете использовать link_toс блоком:

<% link_to(@album) do %>
    <!-- insert html etc here -->
<% end %>
Барри Галлахер
источник
3
link_to требует, чтобы '=' отображался (даже с блоком)
Брэндон
-2

Я знаю, что этот ответ немного запаздывает, но сегодня меня направили сюда, и я не нашел хорошего ответа. Следующее должно работать:

<% link_to raw(html here), @album %>
Роб Доусон
источник
5
Это не следует использовать, поскольку весь HTML-код, введенный внутри, rawподвержен XSS.
Aurril
Не обязательно, это может быть случай, когда HTML создается где-то в вашем собственном приложении, которое, как вы знаете, безопасно. Тем не менее, в 99% случаев этого лучше избегать. (Не говоря уже о том, что в приведенном выше коде есть ошибка, он должен начинаться с <%=, а не с <%.)
GMA
Не лучший способ. html здесь должен быть сгенерирован вашим собственным приложением и обеспечен безопасностью. В ответах выше есть и другие лучшие способы.
Joshua Dance