Как удалить URL-адрес в Rails?

Если я нахожусь в RHTML-представлении в Rails, легко спрятать URL-адрес:

<a href="/redirect?href=<%=u target %>">Foo</a>

Как это сделать в строке? Я хотел бы сделать что-то вроде этого:

<% redirect_href = "/redirect?#{url_escape target}&amp;foo=bar&amp;baz=some_other_stuff" -%>
<a href="<%= redirect_href =>">Foo</a>

Это должно быть тривиально, правильно?

Ответ 1

CGI.escape сделает это:

<% redirect_href = "/redirect?#{CGI.escape target}&amp;foo=bar&amp;baz=some_other_stuff" -%>
<a href="<%= redirect_href =>">Foo</a>

Ответ 2

Rails (activesupport) определяет Hash#to_param (с псевдонимом Hash#to_query):

 {foo: 'asd asdf', bar: '"<#$dfs'}.to_param
 # => "bar=%22%3C%23%24dfs&foo=asd+asdf"

Стоит отметить, что он сортирует ключи запроса (для кеширования HTTP).

Hash#to_param также принимает необязательный параметр пространства имен:

{name: 'David', nationality: 'Danish'}.to_param('user')
# => "user[name]=David&user[nationality]=Danish"

http://api.rubyonrails.org/classes/Hash.html#method-i-to_param

Ответ 3

ERB:: Util.url_encode

может использоваться из любого места, часть ruby ​​std lib.