2

我一直在 3.2.3 中构建一个应用程序,它运行良好,一旦我升级到 3.2.6 以解决安全漏洞,我的一条路线就停止了工作。

这是一个简单的视图,当我在块对象上单击编辑时,它会将我带到编辑屏幕。但是,当我进行更改并点击提交时,我收到此错误:

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

在更新操作中,如果我将 redirect_to @units 更改为 redirect_to units_path,错误就会消失。3.2.6 中有什么改变不会让你像我一样重定向吗?我有另一个具有完全相同的编辑和更新操作的控制器,它可以正常工作。

我有两台笔记本电脑,一台是 3.2.3,另一台是 3.2.6。3.2.3 工作正常,但一旦我升级它,我就得到了同样的错误。

任何帮助表示赞赏。

4

1 回答 1

0

是的,redmine报告了一个类似的问题……但这实际上是您自己的代码中暴露的错误问题。在某处你有一个 nil 被传递给一个路径函数,这应该总是一个错误但不是,而是在请求中捕获了其他参数(有时会做正确的事情)。

通读该链接以获取完整的独家新闻。

我不确定是否真的在看这段代码而没有看到完整的堆栈跟踪......很难想象@units在这一点上为零,所以可能涉及其他一些东西。

这不是超级关键,但在您的命名约定中,@unit它更适合于编辑和更新操作,而不是@units,因为应该只编辑一个单元。控制器的名称是什么?

于 2012-06-17T03:05:43.273 回答