Вопрос

Предположим , что маршрут

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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top