0

我有一个要添加到 URL 变量的字符串,但我无法让 Rails对其进行编码。

这是我所拥有的:

<%= link_to "Example", example_path(@resource, email: '*|EMAIL|*') %>

的输出是:

http://example.com/example/123?email=%2A%7CEMAIL%7C%2A

但我想要:

http://example.com/example/123?email=*|EMAIL|*

我已经尝试了以下所有方法*|EMAIL|*来正确输出,但不行......

<%= link_to "Example", example_path(@resource, email: '*|EMAIL|*').html_safe %>
<%= raw link_to "Example", example_path(@resource, email: '*|EMAIL|*') %>
<%= link_to "Example", example_path(@resource, email: '*|EMAIL|*'.html_safe) %>
<%= link_to "Example", example_path(@resource, email: raw('*|EMAIL|*')) %>
4

2 回答 2

1

你可以尝试类似的东西

<%= link_to "Example", example_path(@resource) + "?email=*|EMAIL|*" %>

这也应该像

<%= link_to "Example", example_path(@resource) + "?email=*|#{@instance_var.upcase}|*" %>如果这就是你想要做的。

显然,按照预期使用 rails 路径助手会很好,但作为最后的手段,这应该可以工作。

您可能还需要对管道做一些事情,请参阅:

如何防止管道字符在 Rails 3/Ruby 1.9.2 中导致错误的 URI 错误?

于 2013-07-29T18:48:21.390 回答
0

我认为您的问题是link_to实施方式

def link_to(*args, &block)
  ...
    url = url_for(options)

    href = html_options['href']
    tag_options = tag_options(html_options)

    href_attr = "href=\"#{ERB::Util.html_escape(url)}\"" unless href
    "<a #{href_attr}#{tag_options}>#{ERB::Util.html_escape(name || url)}</a>".html_safe
  end
end

在 line href_attr = "href=\"#{ERB::Util.html_escape(url)}\"" unless href,该方法 在执行任何其他操作之前ERB::Util.html_escape调用to_s其参数,因此无论您使用什么url最终都会被转义。设置hrefinhtml_options看起来像是一条出路,但tag_options也调用ERB::Util.html_escape.

你可以做

<a href="<%= example_path(@resource, email: '*|EMAIL|*'.html_safe) %>">Example</a>

我认为。

于 2013-07-29T18:35:00.403 回答