10
votes

Dans Rails, est-il possible de charger la mise en page de classe de manière dynamique?

J'ai besoin d'un message pour avoir une disposition différente dans le projet, est-il possible dans des rails de faire quelque chose comme ça? XXX

Merci


0 commentaires

7 Réponses :


0
votes

Décidez la mise en page dans le contrôleur plutôt que le modèle. Votre projetController peut utiliser son propre projetLayout et MessagesController peut ensuite utiliser la mise en page normale si vous le souhaitez.


0 commentaires

2
votes

Vous ne pouvez appliquer que des mises en page au niveau du contrôleur: xxx

Méthode de mise en page Documentation a un exemple sur la manière de faire des mises en page conditionnelle


0 commentaires

2
votes

En outre, puisque la question n'est pas claire, vous pouvez également définir la mise en page pour une seule action avec l'option de rendu.

render :action => 'new', :layout => 'layoutname'


0 commentaires

20
votes

Ceci peut vous aider

class MessagesController < ApplicationController
  layout :get_layout

  def get_layout
    @project? ? 'ProjectLayout' : 'NormalLayout'
  end

end


0 commentaires

1
votes

Vous ne pouvez appliquer que les mises en page des rails sur contrôleur code> action et individuel> action code> niveaux code>.

Disposition unique dans pour chaque contrôleur strong> p> xxx pré>

** ** La ligne ci-dessus Layout "admin" code> chargera la disposition de l'administrateur chaque fois que le contrôleur de message est invoqué. Pour cela, vous devez avoir une mise en page créée dans votre fichier mises en page / admin.html.rb code>. ** p>

Disposition dynamique pour chaque contrôleur strong> P>

class MessagesController < ApplicationController
  layout :dynamic_layout

  def index
   # logic 
   render :action => 'index', :layout => 'index_layout'
  end

  def show
   # logic
   render :action => 'show', :layout => 'show_layout'
  end   
 end


0 commentaires

0
votes

Mes deux cents dans ApplicationController: XXX


0 commentaires

0
votes

Vous pouvez utiliser un PROC :

layout -> {
    if something?
      'my-layout'
    else
      'my-other-layout'
    end
  }


0 commentaires