Question

J'utilise le mobile fu gem pour effectuer une détection d'agent utilisateur, afin de pouvoir servir des modèles d'extension .html ou .mobile en fonction du client,

Maintenant, cette partie fonctionne très bien, mais je n'aime pas que les dossiers de vue soient un peu encombrés avec deux fois plus de fichiers, c'est-à-dire.

app/views/profiles/show.mobile.haml

app/views/profiles/show.html.haml

app/views/profiles/edit.mobile.haml

app/views/profiles/edit.html.haml

etc

ce que j'aimerais avoir à la place c'est :

app/views/profiles/html/show.html.haml

app/views/profiles/html/edit.html.haml

Et

app/views/profiles/mobile/show.mobile.haml

app/views/profiles/mobile/edit.mobile.haml

Et demandez à Rails de rechercher automatiquement le bon dossier/répertoire pour les fichiers en fonction de la demande.Est-ce possible?

C'est peut-être quelque chose de vraiment facile à faire, faites-moi savoir si c'est un comportement qui sort des sentiers battus.

Merci

Était-ce utile?

La solution

Rails 4.1 possède une nouvelle fonctionnalité intégrée appelée Variantes de l'ActionPack, qui détecte l'agent utilisateur (comme le mobile fu gem).

En gros, vous pouvez ajouter ceci par exemple dans votre ApplicationController :

before_action :detect_device_format

private

def detect_device_format
  case request.user_agent
  when /iPad/i
    request.variant = :tablet
  when /iPhone/i
    request.variant = :phone
  when /Android/i && /mobile/i
    request.variant = :phone
  when /Android/i
    request.variant = :tablet
  when /Windows Phone/i
    request.variant = :phone
  end
end

Disons que vous disposez d'un ProfilesController.Maintenant, vous pouvez faire ceci :

class ProfilesController < ApplicationController
  def index
    respond_to do |format|
      format.html          # /app/views/profiles/index.html.erb
      format.html.phone    # /app/views/profiles/index.html+phone.erb
      format.html.tablet   # /app/views/profiles/index.html+tablet.erb
    end
  end
end

Revenons à votre question :Si vous souhaitez rechercher des fichiers dans un autre dossier/répertoire, vous pouvez procéder comme suit :

format.html.phone { render 'mobile/index' }   # /app/views/mobile/index.html+phone.erb

Il y a aussi bon tuto qui montre comment l'utiliser.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top