如何将 link_to 包裹在一些 html ruby​​ 代码周围?

Posted

技术标签:

【中文标题】如何将 link_to 包裹在一些 html ruby​​ 代码周围?【英文标题】:How do I wrap link_to around some html ruby code? 【发布时间】:2010-11-08 08:27:24 【问题描述】:

如何围绕视图代码包装链接?我不知道如何将带有 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>

【问题讨论】:

【参考方案1】:

link_to takes a block of code (>= Rails 2.2) 它将用作标签的主体。

所以,你可以

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

但是我很确定在a 标签内嵌套div 不是有效的HTML。

编辑:在下面的 Amin Ariana 评论中添加了 = 字符。

【讨论】:

此注释仅作为参考: 在 HTML5 中有效,但在早期的 HTML 规范中无效。有关类似问题,请参阅 ***.com/questions/796087/make-a-div-into-a-link。 Rails 2.3.8 使用上述语法仍然出现“语法错误,意外')'”。 如果路径比较复杂,可以直接添加参数,省略初始内容,例如【参考方案2】:

另外,这对某些人来说可能是个问题:

如果您正在做一个包含代码的简单链接而不是&lt;%,请务必写&lt;%=

例如

<%= link_to 'some_controller_name/some_get_request' do %>
  Hello World
<% end  %>

【讨论】:

我认为这在 Rails 3+ 中是必需的【参考方案3】:

我知道这个回复有点滞后 - 但我今天被引导到这里,但没有找到好的答案。以下应该有效:

<% link_to raw(html here), @album %>

【讨论】:

这不应该被使用,因为在raw中输入的所有html都容易出现XSS。 不一定,HTML 可能是从您自己的应用程序中您知道是安全的某处生成的。不过,最好在 99% 的情况下避免这种情况。 (别说上面的代码反正有错误,应该是&lt;%=开头,而不是&lt;%。) 不是最好的方法。这里的 html 必须由您自己的应用程序生成并确保安全。上面的答案还有其他更好的方法。【参考方案4】:

对于较旧的 Rails 版本,您可以使用

<% content_tag(:a, :href => foo_path) do %>
  <span>Foo</span>
<% end %>

【讨论】:

【参考方案5】:

您可以将link_to 与块一起使用:

<% link_to(@album) do %>
    <!-- insert html etc here -->
<% end %>

【讨论】:

link_to 需要“=”才能显示(即使有块)

以上是关于如何将 link_to 包裹在一些 html ruby​​ 代码周围?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 tinyMCE 上围绕 HTML 包裹锚点

如何将“link_to”放在整张卡片下?

HTML - 如何将段落分成同样宽的行?

Rails如何将link_to用于外部网站并使用块?

远程 link_to 请求的是 html 而不是 js

如何在 Slim 中的 <p> 中插入文本和 link_to