Ruby on rails 如何处理Rails中的多布局

Ruby on rails 如何处理Rails中的多布局,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我们有很多面板输入输出应用程序,如管理员、教师、校长、学生、家长等 每个面板都有自己的布局 因此,登录后,我们使用WelcomeController处理此问题 class WelcomeController < ApplicationController def index respond_to do |format| format.html do return render :home if current_user.nil? re

我们有很多面板输入输出应用程序,如管理员、教师、校长、学生、家长等

每个面板都有自己的布局 因此,登录后,我们使用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
但我们希望在URL/上从控制器获取数据。 所以我的问题是如何获取数据?所以我们可以在视图中使用

我是Rails新手,如果我用错了什么,请告诉我。我会从模型中获取数据吗

在我们使用的路线上

get '/student/lesson', to: 'student_lesson_plan#index', as: 'student_lesson'
从索引操作中,我们可以使用变量。所以我想要 而不是

return redirect\u to(“/student/lesson”),如果是当前用户。student?
像这样的

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

我可以使用我在
学生课程计划#索引
中初始化的变量,或者从另一个地方

在我的应用程序中,我会这样设置,根据条件得到不同的布局:

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
由于控制器,我们对如何从模型到视图获取信息有了基本的了解:

在控制器中

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
class StudentController

然后在视图中,您可以在我的视图中抓取并使用
@my\u var\u i\u want\u

我不确定是否理解您的问题。您是否需要帮助才能使不同的应用程序布局正常工作,或者您只是想了解如何将var从控制器传递到视图?嗯,现在我想这样做,如果当前_user.parent@name=StudentLessonPlan.studentReportForParent return render“layouts/parent”endI将更新我的答案,这样您就可以了解如何将变量从模型传递到控制器以查看在您的情况下,我会对每个resources设置一点名称空间,或者至少重定向到为每个resources创建的控制器,以使代码更干净。(学生\管理员、教师\管理员等)我是Rails新手,在Node.js中有经验,从自由职业者那里获得这个项目。现在困在Rails概念中,请详细说明。我没有得到
-views
  -layouts
    -students
      -_my_partials.html.erb
      -application.html.erb
    -other_users
      -_my_partials.html.erb
      -application.html.erb
....
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