Estou construindo um aplicativo Sinatra com modelos de haml e queria saber se é possível implementar algum parâmetro em todo o site. A ideia, no meu caso, seria permitir uma diferente layout.haml
para poder ser selecionado para todas as rotas sem ter que duplicar / reescrever todas as rotas no aplicativo.
Por exemplo, eu queria saber se seria possível obter http://domain.com/route/:normal-params/?layout=layout_b
e poder anexar ?template=template_choice
para qualquer rota no aplicativo e use o layout apropriado.
A única solução que consigo pensar, que parece muito ineficiente, é duplicar cada rota para procurar esse parâmetro. Eu também sinto que isso poderia ser alcançado de alguma forma com um Filtro mas não tenho certeza de como isso poderia ser implementado.
Respostas:
2 para resposta № 1Você pode especificar qual layout você deseja carregar na sua chamada para haml
:
haml :post, :layout => params[:layout].to_sym
Dessa forma, você pode ligar http://domain.com/route/foo/bar?layout=layout_b
e Sinatra procurará o layout apropriado chamado layout_b
para renderizar.
Você provavelmente desejará especificar um layout padrão para renderizar se nenhum for fornecido como um parâmetro de URL:
haml :post, :layout => (params[:layout] || "default").to_sym