Rails 3: почему "link_to" дает неправильный вывод? - PullRequest
0 голосов
/ 22 марта 2011

В моем файле просмотра я набираю следующее:

<table>
  <tr>
    <td><%= link_to(tag(:div, {:class => "my_class"}), "my_address") %></td>
  </tr>
</table>

Результат: (наблюдается в Firebug)

<table>
  <tbody>
    <tr>
      <td>
        <a href="my_address"></a>
        <div class="my_class"></div>
      </td>
    </tr>
  </tbody>
</table>

Почему div не внутри a

Ответы [ 4 ]

2 голосов
/ 22 марта 2011

Вы должны использовать content_tag, а не tag.

<table>
  <tr>
    <td><%= link_to(content_tag(:div, { :class => "my_class" }), "my_address") %></td>
  </tr>
</table>

Честно говоря, в этом случае я предпочитаю использовать блок.

<table>
  <tr>
    <td>
    <%= link_to "my_address" do %>
      <div class="my_class"></div>
    <% end %>
    </td>
  </tr>
</table>

Rails не выполняет никакой проверки HTML, поэтому я не принял во внимание значение допустимого / недействительного HTML, полученного из вашего кода.

2 голосов
/ 22 марта 2011

Согласно Правильно ли помещать div внутри якоря? , вы можете размещать только внутренние элементы внутри якоря. <div> является блочным элементом, поэтому ваш код не будет работать. Вам нужно будет использовать что-то вроде <span>, чтобы обернуть любые данные, которые вы намереваетесь поместить в якорь.

В первом посте говорится, что HTML5 позволяет <a> содержать блоки, поэтому, если вы определяете HTML5 как ваш тип документа, нам нужно копать глубже.

0 голосов
/ 22 марта 2011

Нельзя помещать элементы блока внутри встроенных элементов.Если вы пытаетесь связать div, вы должны использовать это:

 tag(:div, {:class => "my_class", :onclick => "my_address"})

В противном случае используйте span вместо div

0 голосов
/ 22 марта 2011

Вы не можете иметь div внутри тега <a>. Используйте <span> или <p> вместо

...