Domanda

Devo farlo per un controller che utilizza il active_scaffold gemma. Abbiamo un controller che assomigliava a questo:

class Admin::UsersController < ApplicationController
   layout 'admin'

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

Ha funzionato alla grande quando eravamo su Rails 2.3.10, ma stiamo aggiornando ai Rails 3.0.10. Come parte dell'aggiornamento, ho dovuto aggiornare active_scaffold (Attualmente installato dal rails-3.0 ramo di git://github.com/activescaffold/active_scaffold) per essere compatibile. Un problema che stavamo riscontrando è che la ricerca del tavolo non funzionava. Vedrei nei miei file di registro:

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

Si noti che sta rendendo il modello RJS con il layout specificato nel controller. Mi sembra un predefinito irragionevole per me. I modelli RJS non dovrebbero rendere i modelli senza un layout Per impostazione predefinita? Comunque, l'ho risolto come tale:

class Admin::UsersController < ApplicationController
  layout :admin_layout

  private

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

Ciò risolve i problemi con la ricerca e la paginazione. (Il modello RJS è ora reso senza un layout, quindi il browser può eseguire JavaScript risultante). Immagino che la mia domanda sia: perché devo dire Rails che non dovrebbe rendere i modelli RJS con layout? E esiste una soluzione migliore? Mi sembra troppo di un hack (il brutto tipo di hack --- il tipo di hack che si romperà in futuro).

È stato utile?

Soluzione

Ok, l'ho capito. @numeras1311407 Il commento di cui alla mia domanda mi ha portato a controllare il nome del modello di layout. Era layouts/admin.haml. Con Rails 2, quel layout stava solo rendendo le richieste HTML, ma con Rails 3 si applica a tutte le richieste (perché non specifica un tipo di formato). L'ho ribattezzato layouts/admin.html.haml E funziona con un semplice layout 'admin' Nel mio controller (al contrario dell'hack che avevo inventato nella mia domanda).

Quindi la risposta alla domanda "Perché i binari rendono i modelli RJS all'interno di un layout?" è che il file di layout è stato denominato in modo tale che si applica a tutti i formati.

Altri suggerimenti

Rispondi alle tue quazioni:
1. Non esiste una magia in cui i rendering di rotaie layout per il formato JS. Questo è Bacause, è predefinito per i binari rendere il layout con qualsiasi modello a meno che non si dice esplicitamente per evitarlo. Puoi semplicemente esaminare le fonti di Rails in file: actionpack/lib/action_controller/metal/renderers.rb Per vedere: JS Renderer.

2.PERTENZE da usare:

respond_to do |format|
  format.js { render *your_any_options*, layout: false }
end
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top