Question

Je parcourais le livre de l’AWDR sur le développement Web avec Ruby on Rail et l’un des problèmes rencontrés avec l’ancien code était qu’il n’utilisait pas respond_to pour s’assurer que la vue utilisée était bien la vue javascript. Maintenant, dans certains exemples mis à jour, j'ai vu des personnes mentionner plus tard, lorsque vous implémentez une dégradation progressive, utilisez request.xhr? pour dire si l'utilisateur a activé javascript, et sinon, il le redirige.

Je me demandais si vous pouviez utiliser respond_to pour obtenir le même comportement et si oui, si cela est considéré comme une bonne forme ou non et pourquoi?

Donc, ce que je pense faire, c'est quelque chose comme:

def function
  respond_to do |format|
    format.js do
      basic_stuff
    end
    format.html do
      basic_stuff
      user_redirect
    end
  end
end

Cela semble en quelque sorte enfreindre le principe DRY, et il me manque probablement quelque chose sur la façon dont l’utilisateur et le serveur interagissent ici. Pour être honnête, la documentation de l’API ne m’a pas tout expliqué.

Était-ce utile?

La solution

Eh bien, vous pouvez reformer comme ceci:

def function
  basic_stuff # executed regardless of the mime types accepted
  respond_to do |format|
    format.html do
      user_redirect
    end
  end
  # will fall back rendering the default view - which you should ensure will be js
end

request.xhr? examine l'en-tête de la requête & # 8216; s X-Requested-With (pour voir si elle contient "XMLHttpRequest"). respond_to examine les types MIME acceptés.

Vous pouvez utiliser soit pour implémenter une sorte de dégradation progressive.

MAIS vous ne pourrez pas utiliser xhr? pour une dégradation progressive, sauf si vos appels ajax définissent cet en-tête (le prototype le fait automatiquement).

De plus, respond_to offre une plus grande flexibilité, c’est-à-dire l’envoi de xml, json, js, quel qu’il soit du même bloc.

Je recommanderais donc respond_to ici.

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