Rieles: especificación de parámetros sin valor para link_to
-
08-07-2019 - |
Pregunta
Suponiendo la ruta
map.resources :articles
¿cómo se obtiene esto?
/articles?most_popular
utilizando el método link_to
?
intentó lo siguiente:
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: estoy usando herencia_recursos con has_scope
Solución
Si no agrega un valor a los parámetros, no respetará el estándar W3C, que exige que la sección de parámetros tenga la forma field = value
.
Le recomiendo que agregue una nueva acción: most_popular a su controlador de artículos.
En sus rutas.rb:
map.resources :articles, :collection => {:most_popular=>:get}
En su controlador:
class ArticlesController < ApplicationController
...
def most_popular
@articles = ...
end
En sus vistas:
link_to most_popular_articles_path() # /articles/most_popular
Esto será compatible con HTML, sus URL se verán prácticamente iguales (cambiando una? por una /) y su controlador se simplificará (tendrá la acción most_popular separada del índice).
Saludos
Actualización (2017) : Parece que el estándar W3C no exige la sintaxis field = value
(o ya no lo exige). Sin embargo, algunos servidores están documentados para "estrangular". en consultas que no cumplan con esta sintaxis. Consulte es un parámetro de consulta de URL válido si tiene sin valor? para más detalles.
Otros consejos
El último ejemplo que tienes:
link_to articles_path(:most_popular => true) # /articles?most_popular=true
Es la forma correcta. De lo contrario, podría construir el enlace a mano:
<a href="<%= articles_path %>?most_popular">articles</a>