104 lines
3.0 KiB
Ruby
104 lines
3.0 KiB
Ruby
class StudentsController < ApplicationController
|
|
# set_institution will try to load an institution when institution_id is present
|
|
before_action :set_institution
|
|
# set_student will safely find a student either scoped to @institution or globally
|
|
before_action :set_student, only: %i[ show edit update destroy ]
|
|
# ensure nested behaviour for index/new/create (these expect an institution)
|
|
before_action :ensure_institution_for_nested_actions, only: %i[index new create]
|
|
|
|
# GET /students or /students.json
|
|
def index
|
|
if @institution
|
|
@students = @institution.students
|
|
else
|
|
# show all students when not nested
|
|
@students = Student.all
|
|
end
|
|
end
|
|
|
|
# GET /students/1 or /students/1.json
|
|
def show
|
|
end
|
|
|
|
# GET /students/new
|
|
def new
|
|
@student = @institution.students.build
|
|
end
|
|
|
|
# GET /students/1/edit
|
|
def edit
|
|
end
|
|
|
|
# POST /students or /students.json
|
|
# def create
|
|
# @student = @institution.students.build(student_params)
|
|
# if @student.save
|
|
# redirect_to institution_students_path(@institution), notice: 'Student was successfully created.'
|
|
# else
|
|
# render :new, status: :unprocessable_entity
|
|
# end
|
|
# end
|
|
def create
|
|
@student = @institution.students.new(student_params)
|
|
|
|
if @student.save
|
|
respond_to do |format|
|
|
format.js # creates -> create.js.erb
|
|
end
|
|
else
|
|
respond_to do |format|
|
|
format.js { render :error }
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
# PATCH/PUT /students/1 or /students/1.json
|
|
def update
|
|
if @student.update(student_params)
|
|
redirect_to institution_students_path(@institution), notice: 'Student was successfully updated.'
|
|
else
|
|
render :edit, status: :unprocessable_entity
|
|
end
|
|
end
|
|
|
|
# DELETE /students/1 or /students/1.json
|
|
def destroy
|
|
@student.destroy
|
|
redirect_to institution_students_path(@institution), notice: 'Student was successfully destroyed.'
|
|
end
|
|
|
|
private
|
|
# Use callbacks to share common setup or constraints between actions.
|
|
def set_institution
|
|
return unless params[:institution_id].present?
|
|
@institution = Institution.find(params[:institution_id])
|
|
rescue ActiveRecord::RecordNotFound
|
|
# Let other parts handle missing institution (redirects in actions)
|
|
@institution = nil
|
|
end
|
|
|
|
def set_student
|
|
if @institution.present?
|
|
@student = @institution.students.find(params[:id])
|
|
else
|
|
# fallback to global lookup when not nested
|
|
@student = Student.find(params[:id]) if params[:id].present?
|
|
@institution = @student.institution if @student.present?
|
|
end
|
|
rescue ActiveRecord::RecordNotFound
|
|
# will raise in actions if record missing
|
|
raise
|
|
end
|
|
|
|
def ensure_institution_for_nested_actions
|
|
return if @institution.present?
|
|
redirect_to institutions_path, alert: 'Please select an Institution first.'
|
|
end
|
|
|
|
# Only allow a list of trusted parameters through.
|
|
def student_params
|
|
params.require(:student).permit(:first_name, :last_name, :email, :institution_id, :place, :phone_number, :age, :photo)
|
|
end
|
|
end
|