Ruby on rails Rails表单创建在验证错误后提交更新

Ruby on rails Rails表单创建在验证错误后提交更新,ruby-on-rails,ruby,ruby-on-rails-3,form-for,Ruby On Rails,Ruby,Ruby On Rails 3,Form For,我的表单在创建新作业时工作,但当我提交表单时,它出现验证错误(并尝试重新提交表单),它似乎转到控制器中的更新方法(由于未设置ID,因此抛出ActiveRecord::RecordNotFound) 我的控制器: class JobsController < ApplicationController def new @job = Job.new end def edit @job = Job.find(params[:id]) end def cre

我的表单在创建新作业时工作,但当我提交表单时,它出现验证错误(并尝试重新提交表单),它似乎转到控制器中的更新方法(由于未设置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
我的新观点是:

<h2>New Job</h2>
<%= render 'form' %>
新工作

Edit具有相同的
呈现“表单”

表单在哪里?它位于页面
new.html.erb
Edit.html.erb
?把你的表单放在正确的地方,表单就会知道它要做什么。如果您希望上述表单创建新作业,请添加此表单,然后再次尝试创建新作业:

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

我设法找出了问题所在。我在我的模型中调用了
update\u attributes
,这会导致作业被保存(并在不久后被删除)


这使得的
form_认为该项正在更新,并且在尝试更新不存在的内容时引发了问题。我刚刚切换到使用
assign\u attributes
,它不保存任何内容。

在验证页面上,表单中是否有隐藏字段
\u method
?是-这在创建新作业的失败验证表单上。这就是原因。但是想知道为什么在验证发生时它会出现!让我检查一下是否可以帮助您是的,我不确定是什么原因导致它=/表单位于new.html.erb上,并且它确实正常工作,直到我尝试在表单出现验证错误时提交表单。当这种情况发生时,表单再次加载到new.html.erb下,但这次该操作似乎认为它正在进行更新(提交按钮甚至有“更新作业”而不是“创建作业”)因此,您需要指定为窗体创建新作业的路径,尝试我的答案并检查结果。您能显示您的路线吗?当然-请参阅上面的我的路线。无论您在哪个视图上,这都不重要。
form\u for
将检查
@object.new\u record?
以确定它是新的还是正在退出的记录,因此应该添加
post
相应地放置
。感谢您回答自己的问题-这刚刚解决了一个巨大的头痛问题!
Myapp::Application.routes.draw do
  resources :jobs
end
<h2>New Job</h2>
<%= render 'form' %>
<%= form_for (@job, url: jobs_path) do |f| %>