2 votes

Rails form create se soumet à la mise à jour après des erreurs de validation

Mon formulaire fonctionne lors de la création d'une nouvelle tâche, mais lorsque je soumets le formulaire et qu'il présente des erreurs de validation (et que j'essaie de soumettre à nouveau le formulaire), il semble que la méthode de mise à jour de mon contrôleur soit utilisée (ce qui entraîne le rejet de la requête suivante ActiveRecord::RecordNotFound car il n'y a pas de jeu d'identifiants).

Mon contrôleur :

class JobsController < ApplicationController
  def new
    @job = Job.new
  end

  def edit
    @job = Job.find(params[:id])
  end

  def create
    @job = Job.new(params[:job])

    if @job.save
      redirect_to @job, :notice => 'Job was successfully created.'
    else
      render :action => "new"
    end
  end

  def update
    @job = Job.find(params[:id])

    if @job.update_attributes(params[:job])
      redirect_to @job, :notice => 'Job was successfully updated.'
    else
      render :action => "edit"
    end
  end
end

Mon formulaire :

<%= form_for(@job) do |f| %>
  #...
<%= f.submit %>

Sur la page d'erreur de validation, voici le rendu de la balise (alors que cette tâche n'a jamais été insérée dans la base de données et que j'essayais initialement de créer une nouvelle tâche) :

<form accept-charset="UTF-8" action="/jobs/10" class="edit_job" id="edit_job_10" method="post">

Mise à jour - voici mes routes.rb et new.html.erb :

Myapp::Application.routes.draw do
  resources :jobs
end

Et ma nouvelle vue a ceci :

<h2>New Job</h2>
<%= render 'form' %>

Edit a le même render 'form'

1voto

mscriven Points 399

J'ai réussi à comprendre quel était le problème. J'appelais update_attributes dans mon modèle, ce qui entraîne l'enregistrement du job (et sa suppression peu après).

Cela a fait form_for Je pense que l'élément était en train d'être mis à jour et qu'il causait les problèmes en essayant de mettre à jour quelque chose qui n'existait pas vraiment. Je viens de passer à l'utilisation de assign_attributes ce qui ne sauve rien.

0voto

Kien Thanh Points 3078

Où se trouve votre formulaire ? il est sur la page new.html.erb o edit.html.erb ? Placez votre formulaire au bon endroit, et le formulaire saura quelle action il doit effectuer. Dans le cas où vous voulez que votre formulaire ci-dessus crée un nouveau travail, ajoutez ceci et essayez à nouveau de créer un nouveau travail :

<%= form_for (@job, url: jobs_path) do |f| %>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X