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

¿Fue útil?

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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top