Рельсы:Указание параметров без значения для link_to
-
08-07-2019 - |
Вопрос
Предположим , что маршрут
map.resources :articles
как ты это получаешь
/articles?most_popular
используя link_to
способ?
попробовал следующее:
link_to articles_path(:most_popular) # exception
link_to articles_path(:most_popular => nil) # /articles
link_to articles_path(:most_popular => true) # /articles?most_popular=true
примечание:я использую унаследованные ресурсы с has_scope
Решение
Если вы не добавите значение к параметрам, вы не будете соблюдать стандарт W3C, который требует, чтобы раздел параметров имел вид field=value
.
Я рекомендую вам вместо этого добавить новое действие :most_popular в ваш контроллер articles.
На ваших маршрутах.rb:
map.resources :articles, :collection => {:most_popular=>:get}
На вашем контроллере:
class ArticlesController < ApplicationController
...
def most_popular
@articles = ...
end
О ваших взглядах:
link_to most_popular_articles_path() # /articles/most_popular
Это будет совместимо с HTML, ваши URL-адреса будут выглядеть практически одинаково (меняете один?на единицу /), и ваш контроллер будет упрощен (у вас будет самое популярное действие, отделенное от индекса).
С уважением!
Обновление (2017):Похоже, что стандарт W3C не предписывает field=value
синтаксис (или больше не требует этого).Однако документировано, что некоторые серверы "подавляются" запросами, не соответствующими этому синтаксису.Видишь Является ли параметр запроса URL допустимым, если он не имеет значения? за подробностями.
Другие советы
Последний пример, который у вас есть:
link_to articles_path(:most_popular => true) # /articles?most_popular=true
Это правильный путь. В противном случае вы можете просто создать ссылку вручную:
<a href="<%= articles_path %>?most_popular">articles</a>