-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
En las siguientes líneas:
| @evaluation = Evaluation.new |
| @evaluation = Evaluation.new(evaluation_params) |
| @evaluation = Evaluation.find(params[:id]) |
estás creando una Evaluation sin indicar que pertenece al Course que tenés disponible en @course.
Cuando se trabaja con controllers anidados, como este caso, te conviene utilizar la asociación del recurso "padre" (Course) en este caso, para acceder a los recursos anidados (Evaluation, en este caso). De esta forma, todas las consultas a la base y todos los modelos de las evaluaciones van a estar siempre restringidos al curso indicado. De hecho, como lo tenés ahora, podrías acceder a una evaluación de otro curso al que indiques por el :course_id de la URL.
A lo que me refiero es a que hagas algo así:
class EvaluationsController < ApplicationController
before_action :set_course
before_action :set_evaluation, only: [:show, :edit, :update, :destroy]
# GET /evaluations
# GET /evaluations.json
def index
@evaluations = @course.evaluations
end
# GET /evaluations/1
# GET /evaluations/1.json
def show
end
# GET /evaluations/new
def new
@evaluation =@course.evaluations.new
end
# GET /evaluations/1/edit
def edit
end
# POST /evaluations
# POST /evaluations.json
def create
@evaluation = @course.evaluations.new(evaluation_params)
respond_to do |format|
if @evaluation.save
format.html { redirect_to course_evaluations_path(@course), notice: 'Evaluation was successfully created.' }
format.json { render :show, status: :created, location: @evaluation }
else
format.html { render :new }
format.json { render json: @evaluation.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /evaluations/1
# PATCH/PUT /evaluations/1.json
def update
respond_to do |format|
if @evaluation.update(evaluation_params)
format.html { redirect_to course_evaluations_path(@course), notice: 'Evaluation was successfully updated.' }
format.json { render :show, status: :ok, location: @evaluation }
else
format.html { render :edit }
format.json { render json: @evaluation.errors, status: :unprocessable_entity }
end
end
end
# DELETE /evaluations/1
# DELETE /evaluations/1.json
def destroy
@evaluation.destroy
respond_to do |format|
format.html { redirect_to course_evaluations_path(@course), notice: 'Evaluation was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_evaluation
@evaluation = @course.evaluations.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def evaluation_params
params.require(:evaluation).permit(:title, :minNote, :date, :course_id)
end
def set_course
@course = Course.find(params[:course_id])
end
endUpdate: cambié el orden de los
before_action
Metadata
Metadata
Assignees
Labels
No labels