如何将 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】:另外,这对某些人来说可能是个问题:
如果您正在做一个包含代码的简单链接而不是<%
,请务必写<%=
。
例如
<%= 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% 的情况下避免这种情况。 (别说上面的代码反正有错误,应该是<%=
开头,而不是<%
。)
不是最好的方法。这里的 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 代码周围?的主要内容,如果未能解决你的问题,请参考以下文章