Qual è il modo più Rails'ish di gestire layout multipli / viste per la stessa azione di controllo?

StackOverflow https://stackoverflow.com/questions/3720864

Domanda

Lo scenario è questo:

Ho alcuni utenti sul mio sito. Un utente ha un ruolo, quelli rilevanti qui è admin e normal. Ho anche un modello, chiamiamolo SomeModel.

Ho creato un backend per il sito, che utilizza un Ammin layout. Tutti gli amministratori hanno pieno accesso a modificare qualsiasi contenuto.

Il problema si pone con questa relazione: Utente -> possiede -> SomeModel . Ciò significa che un amministratore non utente può possedere un'istanza di SomeModel e dovrebbe essere in grado di modificare i dati di questa istanza.

Il controller per SomeModel ha una modifica azione che poi si rivolge sia gli amministratori e gli utenti regolari.

Tuttavia, non voglio che gli utenti regolari seing il Ammin il layout e in questo momento, il mio modo di fare questo è in questo modo:

if current_user.admin?
  render :layout => 'admin'
end

che per default è il layout standard, se l'utente non è un amministratore. Ho questo in tutte le mie azioni per SomeModel e semplicemente non mi sembra un modo molto Rotaie di fare le cose.

C'è un modo migliore?

È stato utile?

Soluzione

Si può fare questo a livello di controller:

  class MyModelController < ActionController::Base
    layout :user_or_admin_layout

    def index
      # fetching objects
    end

    private
      def user_or_admin_layout
        current_user.admin? ? "admin_layout" : "user_layout"
      end
  end

Ci sono altri esempi nella documentazione rotaie per Layout

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top