我有一个模型,“asignacion”,并且,当创建一个对象时,如果它没有通过验证,我希望表格像往常一样再次显示错误列表。
def create
@asignacion = AsignacionDiet.new(asignacion_params)
if @asignacion.save
UserMailer.aviso_dieta_asignada(@asignacion.user.email, @asignacion.diet).deliver_now
flash[:success] = t(:dieta_asignada)
redirect_to alumnos_path
else
@diets = current_user.dietas_visibles
@diets = @diets.paginate(page: params[:page], per_page: 20)
render :new, id: @asignacion.user_id
end
end
问题是,当@ asignacion.save返回false时,也就是说,验证失败,“render new”无法正常工作,页面会给我错误:No route matches {:action=>"new", :controller=>"asignacion_diets", :locale=>:es}, missing required keys: [:id]
我已经检查过@asignacion.user_id不是nil,它是一个数字
与新操作对应的路线为:get '/alumnos/:id/asignar_dieta' => 'asignacion_diets#new', as: "asignar_dieta"
答案 0 :(得分:1)
此行的问题
render :new, id: @asignacion.user_id
此处@asignacion.user_id
将返回nil reason
@asignacion = AsignacionDiet.new(asignacion_params)
如果@asignacion.save
失败,则表示@asignacion = nil
所以在这里替代你只能这样做: -
render :new
recommended =>您应该使用新表单在隐藏字段中传递user_id
,因此,如果@asignacion.save
失败,那么您将能够使用id: params[:user_id]