Question

Je dois faire cela pour un contrôleur qui utilise le gem active_scaffold. Nous avons un contrôleur qui ressemblait à ceci:

class Admin::UsersController < ApplicationController
   layout 'admin'

   active_scaffold :users do |config|
     config.search.columns = [:first_name, :last_name]
   end
end

Cela a très bien fonctionné lorsque nous étions sur Rails 2.3.10, mais nous passons à Rails 3.0.10. Dans le cadre de la mise à niveau, j'ai dû mettre à niveau active_scaffold (actuellement installé à partir de la branche rails-3.0 de git://github.com/activescaffold/active_scaffold) pour être compatible. Un problème que nous avions est que la recherche de la table ne fonctionnait pas. Je verrais dans mes fichiers journaux:

Rendered <snip>/gems/active_scaffold-25b3d724f35b/frontends/default/views/list.js.rjs within layouts/admin (923.5ms)

Notez que cela rend le modèle RJS avec la disposition spécifiée dans le contrôleur. Cela me semble un défaut déraisonnable. Les modèles RJS ne devraient-ils pas afficher sans une mise en page par défaut ? Quoi qu'il en soit, je l'ai corrigé comme tel:

class Admin::UsersController < ApplicationController
  layout :admin_layout

  private

  def admin_layout
    respond_to do |format|
      format.js   { false }
      format.html { 'admin' }
    end
  end
end

Cela résout les problèmes de recherche et de pagination. (Le modèle RJS est maintenant rendu sans mise en page, de sorte que le navigateur peut exécuter le Javascript résultant). Je suppose que ma question est la suivante: pourquoi dois-je dire à Rails qu'il ne devrait pas rendre les modèles RJS avec des mises en page? Et y a-t-il une meilleure solution? Cela me semble trop être un hack (le mauvais type de hack - le genre de hack qui se cassera à l'avenir).

Était-ce utile?

La solution

D'accord, je l'ai compris.Le commentaire de @ numbers1311407 sous ma question m'a amené à vérifier le nom du modèle de mise en page.C'était layouts/admin.haml.Avec Rails 2, cette mise en page n'était rendue que pour les requêtes HTML, mais avec Rails 3, elle s'applique à toutes les requêtes (car elle ne spécifie pas de type de format).Je l'ai renommé en layouts/admin.html.haml et il fonctionne avec un simple layout 'admin' dans mon contrôleur (par opposition au hack que j'avais proposé dans ma question).

Donc, la réponse à la question, "Pourquoi Rails affiche-t-il des modèles RJS dans une mise en page?"est que le fichier de mise en page a été nommé de telle sorte qu'il s'applique à tous les formats.

Autres conseils

Répondez à vos questions:
1. Il n'y a pas de magie dans la disposition des moteurs de rendu Rails au format JS.C'est parce que Rails est par défaut pour rendre la mise en page avec n'importe quel modèle, sauf si vous dites explicitement de l'éviter.Vous pouvez simplement consulter les sources Rails dans le fichier: actionpack/lib/action_controller/metal/renderers.rb pour voir: js renderer.

2.Essayez d'utiliser:

respond_to do |format|
  format.js { render *your_any_options*, layout: false }
end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top