le rendu des fichiers différents pour mobile vs bureau
Question
Je codage sur une petite application web en utilisant http://padrinorb.org (haml + lesscss) pour les deux mobile (Android / iPhone / iPad) et les utilisateurs de bureau, et en tant que tel, je veux afficher html / css légèrement différent pour les différents périphériques.
Pour déterminer les différents clients que j'utilise détecter rack mobile qui fonctionne très bien jusqu'à présent.
Pour obtenir la mise en page pour devenir layouts / application.mobile-je utiliser ces aides / emballages pour render
def preferred_extension
if request.xhr?
"js"
elsif env["X_MOBILE_DEVICE"]
"mobile"
else
"html"
end
end
def preferred_layout
if preferred_extension.eql? "html"
"application"
else
"application.#{preferred_extension}"
end
end
def render_preferred filename
filename = "#{filename}.#{preferred_extension}"
if request.xhr?
layout_file = false
else
layout_file = "layouts/#{preferred_layout}".to_sym
end
render filename, :layout => layout_file
end
Cependant, cela ne me permet pas quand traiter ... et il partials se sent comme quelqu'un doit avoir une meilleure solution pour cela qu'un simple emballage et rendu partiel dans une aide.
Ce que je veux est de ne pas arroser mes contrôleurs et vues avec le code bizarre juste pour rendre le fichier / partiel correct avec la mise en page correcte.
Je voudrais rendre la découverte de savoir quel fichier à utiliser, et de retomber à filename.haml s'il n'y a pas le nom de fichier. # {} Preferred_extension .haml.
Dans les rails il y a cette chose type mime que j'ai utilisé dans un précédent projet, mais je n'ai rien trouvé similaire pour padrino (sinatra)
La solution
je l'ai résolu par la mise à @_content_type
preferred_extension dans un bloc avant à l'intérieur de chaque application / controllers /