2

私は 3.2.3 でアプリを構築してきましたが、問題なく動作しています。セキュリティの脆弱性に対処するために 3.2.6 にアップグレードするとすぐに、ルートの 1 つが機能しなくなりました。

これは単純なビューで、ブロック オブジェクトの編集をクリックすると、編集画面が表示されます。ただし、変更を加えて送信すると、次のエラーが表示されます。

Routing Error

No route matches {:action=>"edit", :controller=>"units", :id=>nil}

私のコントローラーには、編集と更新のアクションがあります。

def edit
    @units = Unit.find(params[:id])
  end

def update
    @units = Unit.find(params[:id])

    respond_to do |format|
      if @units.update_attributes(params[:unit])
        format.html { redirect_to @units, notice: 'Unit was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @units.errors, status: :unprocessable_entity }
      end
    end
  end

update アクションで、redirect_to @units を redirect_to units_path に変更すると、エラーはなくなります。3.2.6 で何か変更があり、私のようにリダイレクトできなくなりましたか? まったく同じ編集および更新アクションを持つ別のコントローラーがあり、そのまま正常に動作します。

私は 3.2.3 と 3.2.6 の 2 つのラップトップを持っています。3.2.3 は正常に動作しますが、アップグレードするとすぐに同じエラーが発生しました。

どんな助けでも大歓迎です。

4

1 に答える 1

0

はい、似たような問題がredmineから報告されました... しかし、それは実際には、公開された自分のコードのバグの問題です。どこかで nil がパス関数に渡されていますが、これは常にエラーになるはずでしたが、そうではなく、代わりに使用する要求で他のパラメーターをキャッチしました (これは時々正しいことをしました)。

そのリンクを読んで、完全なスクープを入手してください。

完全なスタック トレースを確認せずに、このコードが本当にここにあるのかどうかは@unitsわかりません。

これはそれほど重要ではありませんが、命名規則では、編集対象のユニットは 1 つだけであるため@unit、 の代わりに編集および更新アクションに適しています。@unitsコントローラーの名前は?

于 2012-06-17T03:05:43.273 に答える