我在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_更改为@units以将_重定向到units_path,则错误将消失。在3.2.6中有什么改变不会让你像我一样改变方向吗我有另一个控制器与完全相同的编辑和更新操作,它工作正常。
我有两台笔记本电脑,一台3.2.3,另一台3.2.63.2.3运行良好,但我一升级它,就出现了同样的错误。
如有任何帮助,我们将不胜感激。

最佳答案

是的,从redmine报告了一个类似的问题但这实际上是你自己代码中暴露的一个错误在某个地方,有一个nil被传递给一个path函数,这个函数应该一直是一个错误,但不是,而是在请求使用时捕捉到其他参数(有时这样做是正确的)。
请通读这个链接以获取完整的独家新闻。
我不确定这段代码是否真的存在于这里而没有看到完整的堆栈跟踪很难想象@units在那一点上是零,所以可能还牵涉到其他问题。
它不是超临界的,但是在命名约定中,@unit更适合于编辑和更新操作,而不是@units,因为应该只编辑一个单元控制器的名称是什么?

关于ruby - Rails 3.2.6路线不再起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11067903/

10-13 02:08