Rails 3.2.6路由不再有效

时间:2012-06-16 23:47:56

标签: ruby ruby-on-rails-3 routes

我一直在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工作正常,但一旦升级它我就得到了同样的错误。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

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

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

我不确定看这段代码是否真的在这里而没有看到完整的堆栈跟踪...很难想象@units在那时是零,所以可能还有其他的东西。

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