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でパイプ文字が原因でBad 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

の行href_attr = "href=\"#{ERB::Util.html_escape(url)}\"" unless hrefで、メソッド は他の処理を行う前にその引数をERB::Util.html_escape呼び出すため、 for を使用したものはすべてエスケープされます。設定は抜け道のように見えますが、も呼び出します。to_surlhrefhtml_optionstag_optionsERB::Util.html_escape

あなたはただすることができます

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

おもう。

于 2013-07-29T18:35:00.403 に答える