Как вложить div внутри тега привязки в рельсах

Я немного любитель Ruby on Rails, и я пытаюсь вложить тег div внутрь тега привязки в рельсах. Я могу заставить его работать, но полученный код, который я написал, ужасен и, конечно, НЕ рельсовый путь.

Вот пример того, что я пытаюсь сделать в HTML:

<a href="tell-a-friend">
<div id="tellafriend">
    <strong>Strength in Numbers.</strong><br />
    Suggest a friend or colleague to participate in this survey.
</div>
</a>

Вот что я придумал, чтобы сделать это в ERB:

<%= link_to content_tag(:div, 
    content_tag(:strong, 'Add your labor rates now.') + 
    content_tag(:br, '') + ' We are counting on you.', :id => 'participate'), 
participate_path %>

Или здесь я смешал немного HTML и ERB:

<%= link_to '<div id="results">
    <strong>See the results.</strong><br />
    Knowledge is power.
</div>'.html_safe, results_path %>

Оба моих решения кажутся очень уродливыми... но перемещение его в помощник не казалось правильным, учитывая, что содержимое DIV меняется и что я отображаю только 3 из них на одной странице.

Так что, если кто-то знает лучший способ сделать это, мне интересно! Меня устраивает любая комбинация HTML, ERB и HAML.


person Scott Swezey    schedule 19.06.2010    source источник


Ответы (3)


Ссылки работают как блоки:

<% link_to '', my_path do %>
  <div></div>
<% end %>
person Jarrod    schedule 19.06.2010
comment
Вау, не могу поверить, что я этого не знал. /cry Обновление: только что протестировал его в моем приложении rails3 beta4... нужна небольшая настройка, чтобы заставить его работать. По существу ‹% link_to my_path do %› ... ‹% end %› - person Scott Swezey; 19.06.2010
comment
Да, извините за это. Часть link_to вообще не должна быть в блоке. И Rails 3 может использовать ‹%= вместо ‹% в первой строке. - person Jarrod; 19.06.2010

К вашему сведению: ANCHOR, окружающий DIV, недопустим в HTML 4.01 Transitional (но он есть в HTML5?), поэтому убедитесь, что вы используете правильный тип документа, и проверьте его в целевом браузере (браузерах)!

<head>
<title>a</title>
</head>
<body>
<div>
<a href="www.google.com">
<div>test</div>
</a>
</div>
</body>
</html>

Вы можете запустить это в W3C Validator и изменить DOCTYPE, чтобы увидеть, для какого режима(ов) это действительный. (Не забудьте также указать кодировку, чтобы избавиться от предупреждения :-)

person Community    schedule 19.06.2010
comment
Интересно, но это конкретный вопрос рельсов. - person Scott Swezey; 19.06.2010
comment
Вы также можете просто поместить пустой тег привязки перед div. - person Tomas Markauskas; 19.06.2010

Самое худшее это:

<%= link_to(url, html_options = {}) do %>
   # name
<% end %>
person Mathieu Allain    schedule 15.08.2015