2016-04-09 15 views
2

behandelt haben wir haben viele Panel in Anwendung wie Admin, Lehrer Principal, Student, Elternteil etc.Wie man mehrere Layout in Rails

Jede Platte sein eigenes Layout haben So beim Login Wir kümmern uns um diese Option, um Daten von der Steuerung WelcomeController

class WelcomeController < ApplicationController 
    def index 
    respond_to do |format| 
     format.html do 
     return render :home if current_user.nil? 
     return render :admin if current_user.super? 
     return redirect_to("/student/lesson") if current_user.student? 
     return redirect_to("/teacher/lesson") if current_user.teacher? 
     return render "layouts/principal" if current_user.principal? 
     return render "layouts/coordinator" if current_user.coordinator? 
     return render "layouts/viceprincipal" if current_user.viceprincipal? 
     return render "layouts/parent" if current_user.parent? 
     end 
    end 
    end 
end 

So jetzt benutzen wir

return redirect_to("/student/lesson") if current_user.student? 

Wie für Student seine Route umleiten aber wir wollen, dass auf URL / wir Daten vom Controller erhalten. Also mein Problem ist, wie man Daten bekommt? So können wir in Ansichten verwenden

Ich bin neu in Rails, wenn ich etwas falsch benutze Bitte lassen Sie es mich wissen. Bekomme ich Daten von Model?

In Routen verwenden wir

get '/student/lesson', to: 'student_lesson_plan#index', as: 'student_lesson' 

Und aus dem Index Aktion haben wir Variablen, die wir verwenden. Deshalb mag ich statt

return redirect_to("/student/lesson") if current_user.student? so etwas wie diese

return render "layouts/student" if current_user.student? 

Und ich kann diese Variablen verwenden, die ich in student_lesson_plan#index oder von einem anderen Ort initialisieren

+0

verwenden greifen kann ich bin mir nicht sicher, dass Ihre Frage zu verstehen. Brauchen Sie Hilfe, um verschiedene Anwendungslayouts zu erhalten, oder wollen Sie einfach verstehen, wie var vom Controller an Ansichten übergeben wird? –

Antwort

1

In meiner Anwendung würde ich so etwas wie dieses Set um ein anderes Layout je nach den Bedingungen zu erhalten:

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    protect_from_forgery with: :exception 

    layout :layout_by_user_types # works like a before action 

    def layout_by_user_types 
    if current_user.student? 
     "students/application" 
    elsif current_user.other_condition? 
     "other_name_space/application" 
    else 
     "application" 
    end 
    end 

end 

In meinen Ansichten Ordner Ich würde die verschiedene Layouts trennen, so ich verschiedene css/js benötigt, wenn anrufen ...

-views 
    -layouts 
    -students 
     -_my_partials.html.erb 
     -application.html.erb 
    -other_users 
     -_my_partials.html.erb 
     -application.html.erb 
.... 

Das grundlegende Verständnis davon, wie wir Informationen von Modellen Ansichten dank den Controller erhalten:

in einem Controller

class StudentController < ApplicationController 

    def_index 
    @my_var_i_want_in_my_view = Student.my_query_to_database 
    @my_var_i_want_in_my_view_too = Student.my_super_action_that_will_give_some_data_and_that_is_a_method_in_my_model 
    end 

end 

Dann in der Ansicht, die Sie und @my_var_i_want_in_my_view

+0

hmm, jetzt mache ich das, wenn current_user.parent? @ name = StudentLessonPlan.studentReportForParent return machen „Layouts/Eltern“ Ende – abhaygarg12493

+0

ich meine Antwort aktualisiert werden, so können Sie bekommen, wie var vom Modell übergeben werden, um Ansichten Namespace Ich würde –

+0

ohhh wirklich In Ihrem Fall eine Menge – abhaygarg12493

Verwandte Themen