Rails表单创建提交验证错误后更新

时间:2012-11-10 04:27:19

标签: ruby-on-rails ruby ruby-on-rails-3 form-for

我的表单在创建新作业时有效,但是当我提交表单并且它有验证错误(并尝试重新提交表单)时,它似乎转到我的控制器中的更新方法(抛出{{1}因为没有设置ID。)

我的控制器:

ActiveRecord::RecordNotFound

我的表格:

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

在验证错误页面上,这是标记呈现的内容(即使此作业从未插入数据库,我最初尝试创建新作业):

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

更新 - 这是我的routes.rb和new.html.erb:

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

我的新观点有:

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

编辑具有相同的<h2>New Job</h2> <%= render 'form' %>

2 个答案:

答案 0 :(得分:1)

我设法找出问题所在。我在我的模型中调用了update_attributes,这导致Job被保存(并在之后不久被删除)。

这使得form_for认为该项目正在更新,并在尝试更新不存在的内容时导致问题。我刚刚切换到使用assign_attributes而不保存任何东西。

答案 1 :(得分:0)

您的表单在哪里?,它位于页面new.html.erbedit.html.erb?将表单放在正确的位置,表单将知道它必须执行的操作。如果您希望上述表单创建新作业,请添加此作业并再次尝试创建新作业:

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