我的表单在创建新作业时有效,但是当我提交表单并且它有验证错误(并尝试重新提交表单)时,它似乎转到我的控制器中的更新方法(抛出{{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' %>
答案 0 :(得分:1)
我设法找出问题所在。我在我的模型中调用了update_attributes
,这导致Job被保存(并在之后不久被删除)。
这使得form_for
认为该项目正在更新,并在尝试更新不存在的内容时导致问题。我刚刚切换到使用assign_attributes
而不保存任何东西。
答案 1 :(得分:0)
您的表单在哪里?,它位于页面new.html.erb
或edit.html.erb
?将表单放在正确的位置,表单将知道它必须执行的操作。如果您希望上述表单创建新作业,请添加此作业并再次尝试创建新作业:
<%= form_for (@job, url: jobs_path) do |f| %>