没有路由匹配,缺少必需的密钥:[:id]

时间:2018-04-04 19:21:03

标签: ruby-on-rails validation ruby-on-rails-5

我有一个模型,“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"

1 个答案:

答案 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]

执行新操作
相关问题