Pergunta

Eu tenho tentado usar routes.rb para criar um URL / semelhante-para-: produto (onde o produto é dinâmico) para o meu site. A questão é que routes.rb prontamente suporta URLs como /: produto semelhante, mas não suporta o antigo porque requer: produto a ser precedido por um separador ( '/' é um separador, mas '-' não é). A lista de separadores está em ActionController :: Routing :: Separadores.

Eu não posso acrescentar '-' como separador porque: produto também pode conter um hífen. Qual é a melhor forma de apoiar uma URL como esta?

Uma maneira que eu tentei com sucesso é não usar routes.rb e colocar o URL de análise lógica no próprio controlador, mas isso não é a forma mais limpa.

Foi útil?

Solução

Na verdade, você pode adicionar - como um separador, então use rota englobamento.

map.similar_product '/similar-to-*product', :controller => 'products', :action => 'similar'

Então, em ProductsController # semelhantes

@product = Product.find_by_slug params[:product].join('-')

Apesar de refatoração parece mais agradável, já que com essa abordagem, você vai precisar para lidar especialmente todas as lesmas que podem conter hífens.

Outras dicas

Eu refatorar seus URLs de modo que eles são simplesmente "similar-to / produto"

Uma solução fácil é usar um roteamento filtro . Veja README para mais detalhes.

Com o encaminhamento filtro que você pode ter um /similar-to-:product url, pré-processar-lo para /similar-to/:product antes que chegue ao encaminhamento de reconhecimento. Você também vai querer de pós-processamento gerado caminhos de volta de /similar-to/:product para /similat-to-:product.

Estou um pouco confuso, mas talvez você possa adicionar "a-" como um separador?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top