У меня есть тег select, который используется для изменения фильтра по URL-адресу. При изменении я перезагружаю страницу, чтобы соответствующим образом обновлять результаты. Очевидно, выбранный фильтр должен отображаться как выбранный. Но это не сработает.
<%= select_tag("filter_rating" , (:selected =>) options_for_select(rating_filter_options, (request.env['PATH_INFO']))) %>
Я удалил (:selected =>)
поскольку это кажется ненужным.
Значение rating_filter_options:
# [["by my rating", "/all"], ["1+", "/rating%3E=1"], ... , ["5", "/rating%3E=5"]]
Причина, по которой текущий фильтр не будет выбран, заключается в том, что request.env['PATH_INFO']
возвращает /rating>=1
, что отличается от /rating%3E=5
. Таким образом, решение было бы избежать этого неприятного %3E
.
Я попытался использовать CGI.unescape
, h
, html_safe
в select tag
, но до сих пор мои попытки потерпели неудачу.
Есть идеи?
Обновить:
Я изменил помощника, который создал rating_filter_options
и правильно разместил CGI.unescape
чтобы он теперь возвращался:
# [["by my rating", "/all"], ["1+", "/rating>=1"], ... , ["5", "/rating>=5"]]
Кроме того, я использую CGI.unescape
для request.env['PATH_INFO']
чтобы убедиться, что это то же самое. Результат в журналах и HTML утверждают, что теперь это правильно. НО выбранный фильтр по-прежнему не выбирается...
CGI
должен работать.
irb(main):112:0> CGI.unescape("/rating%3E=1")
=> "/rating>=1"