Rails: указание параметров без значения для link_to - PullRequest
2 голосов
/ 29 ноября 2009

Предполагаемый маршрут

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

Ответы [ 2 ]

3 голосов
/ 30 ноября 2009

Если вы не добавите значение к параметрам, вы не будете соблюдать стандарт W3C, который требует, чтобы раздел параметров имел форму field=value.

Рекомендую вместо этого добавить в свой контроллер статей новое действие: most_popular.

На вашем маршруте.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 будут выглядеть практически одинаково (изменение один на один /), а ваш контроллер будет упрощен (у вас будет действие most_popular, отделенное от индекса).

Привет!

Обновление (2017) : Похоже, что стандарт W3C не предписывает синтаксис field=value (или не требует его больше). Однако некоторые серверы задокументированы так, что они «задыхаются» от запросов, не соответствующих этому синтаксису. См. Допустим ли параметр запроса URL, если он не имеет значения? для получения подробной информации.

1 голос
/ 29 ноября 2009

Последний пример, который у вас есть:

link_to articles_path(:most_popular => true) # /articles?most_popular=true

Это правильный путь. В противном случае вы можете просто создать ссылку вручную:

<a href="<%= articles_path %>?most_popular">articles</a>
...