Rails 3:为什么“link_to”输出错误?

时间:2011-03-22 12:21:39

标签: ruby-on-rails ruby-on-rails-3 link-to

在我的视图文件中,我输入以下内容:

<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 个答案:

答案 0 :(得分:2)

根据Is putting a div inside a anchor ever correct?,您只能将内嵌元素放在锚点内。 <div>是一个块元素,因此您的代码将无效。您需要使用类似<span>的内容来包装您想要放入锚点的任何数据。

第一篇文章继续说HTML5允许<a>包含块,所以如果你将HTML5定义为你的doctype,那么我们需要深入挖掘。

答案 1 :(得分:2)

您应该使用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 :(得分:0)

div代码中无法<a>。请改用<span><p>

答案 3 :(得分:0)

您不能将块元素放在内联元素中。如果您尝试链接div,则应使用此:

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

否则,请使用span代替div