Rails: specifing params sem valor para link_to
-
08-07-2019 - |
Pergunta
Supondo que a rota ??p>
map.resources :articles
como você começa esta ??p>
/articles?most_popular
usando o método link_to
?
tentei o seguinte:
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
Nota: eu estou usando inherited_resources com has_scope
Solução
Se você não adicionar um valor para os parâmetros que você não será respeitando o padrão W3C, que mandatos que a seção params tem a forma field=value
.
Eu recomendo que você adicionar um novo:. Ação most_popular a seus artigos controlador, em vez
Em seu routes.rb:
map.resources :articles, :collection => {:most_popular=>:get}
No controlador:
class ArticlesController < ApplicationController
...
def most_popular
@articles = ...
end
No seu ponto de vista:
link_to most_popular_articles_path() # /articles/most_popular
Esta será HTML-compliant, seus urls ficará praticamente o mesmo (mudando um? Por um /) e seu controlador será simplificado (você terá a ação most_popular separado do índice).
Saudações!
Update (2017) : Parece que o padrão W3C não obriga a sintaxe field=value
(ou não exige mais nada). No entanto, alguns servidores estão documentadas para "choke" em consultas que não cumpram com esta sintaxe. Consulte é uma URL consulta parâmetro válido se tiver nenhum valor? para mais detalhes.
Outras dicas
O último exemplo que você tem:
link_to articles_path(:most_popular => true) # /articles?most_popular=true
é a maneira correta. Caso contrário, você poderia simplesmente construir o link manualmente:
<a href="<%= articles_path %>?most_popular">articles</a>