2

我的表单在创建新作业时有效,但是当我提交表单并且它有验证错误(并尝试重新提交表单)时,它似乎转到了我的控制器中的更新方法(ActiveRecord::RecordNotFound因为没有设置 ID 而引发) .

我的控制器:

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 %>

在验证错误页面上,这就是标签呈现的内容(即使该作业从未插入数据库并且我最初试图创建一个新作业):

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

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

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

我的新观点是这样的:

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

编辑有相同的render 'form'

4

2 回答 2

1

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

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

于 2012-11-16T20:59:17.413 回答
0

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

<%= form_for (@job, url: jobs_path) do |f| %>
于 2012-11-10T05:35:20.677 回答