0

私は通常の足場からのほとんどのコードを使用しています。唯一の変更は、質問に対して4つの回答オブジェクトを作成する4.timesブロックです。その理由は、ビューに対応する入力フィールドがあるためです。ここで、検証が失敗した場合、new.html.erbが再度レンダリングされますが、私が読んだ後は、「new」アクションが再度呼び出されることはありません。ただし、4.timesブロックに依存しています。そうしないと、ビューのループにループスルーの答えがないためです。これを修正するにはどうすればよいですか?リダイレクトを試みましたが、エラーメッセージが消えました。

新しいアクション

def new
    @question = Question.new

    4.times do
      @question.answers.build
    end

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @question }
    end
  end

アクションを作成する

def create
    @question = Question.new(params[:question])

    respond_to do |format|
      if @question.save
        format.html { redirect_to @question, notice: 'Question was successfully created.' }
        format.json { render json: @question, status: :created, location: @question }
      else
        format.html { render action: "new" }
        format.json { render json: @question.errors, status: :unprocessable_entity }
      end
    end
  end
4

2 に答える 2

0

確認する必要があるの@questionは、作成アクションです。理論的には、新しく作成された4つの回答が含まれているはずなので、フォームを再表示するとこれらも含まれます。

それらが書き込まれていない場合は、accepts_nested_attributes_forを調べて、要求から正しく逆シリアル化されていることを確認する必要があります。

于 2012-08-09T11:00:58.317 に答える
0

まさにあなたのタイトルが示唆するように:renderアクションをレンダリングするだけで(に属するテンプレート)、アクション自体を実行しません。

失敗した create 呼び出しで事前に作成された回答を再度レンダリングするには:reject_if、ネストされた属性の設定から条件を削除することをお勧めします。このようにして、送信された空の回答が保持されます。それらがデータベースに書き込まれないようにするには、質問モデルに定期的な検証を追加するだけです...

于 2012-08-09T12:26:25.533 に答える