简体   繁体   English

创建学生后重定向到用户个人资料页面

[英]Redirecting to user profile page after creating a student

I have the following controllers: 1- students_controller.rb 我有以下控制器: 1- students_controller.rb

class StudentsController < ApplicationController
  def index
    @students = Student.all
  end

  def show
    @student = Student.find(params[:id])
  end

  def new
    @student = Student.new
  end

  def create
    @student = Student.new(params[:student])
    if @student.save
      flash[:notice] = ' Student Record Saved Successfully. Please fill the Parent Details.'
      redirect_to new_student_guardian_path(@student.id)
    else
      flash[:error] = 'An error occurred please try again!'
      render 'new'
    end
  end

  def edit
  end
end

2- guardians_controller.rb 2-guardians_controller.rb

class GuardiansController < ApplicationController
  before_filter :set_student, only: [:new, :create]
  def index
    @guardian = Guardian.all
  end

  def show
    @guardian = Guardian.find(params[:id])
  end

  def new
    @guardian = Guardian.new
  end

  def create
    @guardian = Guardian.new(params[:guardian])
    if @guardian.save
      flash[:notice] = ' Parent Record Saved Successfully. Please fill the Additional Details.'
      redirect_to new_student_previous_detail_path(@student)
    else
      flash.now[:error] = 'An error occurred please try again!'
      render 'new'
    end
  end

  def edit
  end

  private
  def set_student
    @student = Student.find(params[:student_id])
  end

end

3- previous_details_controller.rb 3-previous_details_controller.rb

class PreviousDetailsController < ApplicationController
  before_filter :set_student, only: [:new, :create]
  def index
    @previous_detail = PreviousDetail.all
  end

  def show
    @previous_detail = PreviousDetail.find(params[:id])
  end

  def new
    @previous_detail = PreviousDetail.new
  end

  def create
    @previous_detail = PreviousDetail.new(params[:previous_detail])
    if @previous_detail.save
      flash[:notice] = 'Record Saved Successfully.'
      # redirect_to user profile page
    else
      flash.now[:error] = 'An error occurred please try again!'
      redirect_to '/student/admission1'
    end
  end

  def edit

  end

  private
  def set_student
    @student = Student.find(params[:student_id])
  end
end

4- student.rb 4-student.rb

class Student < ActiveRecord::Base
  after_create :add_to_users

  belongs_to :user
  accepts_nested_attributes_for :guardians
  has_one :previous_detail
  accepts_nested_attributes_for :previous_detail

  def add_to_users
    new_user = User.new
    new_user.user_name = self.first_name
    new_user.first_name = self.first_name
    new_user.last_name = self.last_name
    new_user.email = self.email
    new_user.password = "123456"
    new_user.password_confirmation = "123456"
    new_user.user_type_id = 3
    new_user.save
  end
end

This callback is used to create the student in users model. 此回调用于在用户模型中创建学生。

How can i tell the previous_details_controller.rb to go to the user profile page(the student who just created and also created in users model using the after create :add_to_user ) ? 我怎样才能告诉previous_details_controller.rb转到用户个人资料页面(刚创建并也在用户模型中使用after create :add_to_user )?

I have solved my problem and I will add the slolution maybe will be helpful for anyone if needed. 我已经解决了我的问题,如果需要的话,我会补充一点,这可能对任何人都有帮助。

1- Modifying the callback method add_to_user to the following 1-将回调方法add_to_user修改为以下内容

def add_to_users
    new_user = User.new
    new_user.user_name = self.first_name
    new_user.first_name = self.first_name
    new_user.last_name = self.last_name
    new_user.email = self.email
    new_user.password = "123456"
    new_user.password_confirmation = "123456"
    new_user.user_type_id = 3
    self.user_id = new_user.id
    new_user.save
    t = Student.find(self.id)
    t.user_id = new_user.id
    t.save
  end

so it will add the student to users model and also will update the user_id in student model to make a match between both. 因此它会将学生添加到用户模型中,并且还将更新学生模型中的user_id以在两者之间进行匹配。 also i have modified the name of callback above to after_create :add_to_users , on: :create to make sure it will raise on create action only. 我也将上面的回调的名称修改为after_create :add_to_users , on: :create ,以确保它仅在create动作时引发。

2- Modifying the create action in previous_details_controller where i need to redirect to user profile to the following 2-在需要将用户配置文件重定向到以下内容的previous_details_controller中修改create动作

def create
    @previous_detail = PreviousDetail.new(params[:previous_detail])
    if @previous_detail.save
      flash[:notice] = 'Record Saved Successfully.'
      redirect_to user_path(@student.user_id)
    else
      flash.now[:error] = 'An error occurred please try again!'
      redirect_to '/student/admission1'
    end
  end

after typing all this will redirect me to the User's profile page which belongs to the student who newly added to the system. 输入所有内容后,这会将我重定向到属于新添加到系统的学生的用户个人资料页面。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM