2

私のフォームは新しいジョブを作成するときに機能しますが、フォームを送信して検証エラーが発生すると(そしてフォームを再送信しようとすると)、コントローラーの更新メソッドに移動するようです(ActiveRecord::RecordNotFoundIDが設定されていないためにスローされます) 。

私のコントローラー:

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_attributes何も保存されない使用に切り替えました。

于 2012-11-16T20:59:17.413 に答える
0

あなたのフォームはどこにありますか?、それはページにありますnew.html.erbedit.html.erb? フォームを適切な場所に配置すると、フォームは何をする必要があるかを認識します。上記のフォームに新しいジョブを作成する場合は、これを追加して、新しいジョブをもう一度作成してみてください。

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