[英]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.