【问题标题】:Rails views: missing template after render called following failed validation with nested resourcesRails 视图:在使用嵌套资源验证失败后调用渲染后缺少模板
【发布时间】:2010-12-01 12:38:31
【问题描述】:

我正在尝试在 Rails 3 中处理失败的验证。

我有一个带有嵌套 cmets 的章节资源。总共只有一个视图;来自 chapters_controller 的显示视图,其中包含发布新评论的表单并指向 cmets_controller 创建操作,如下所示(包括控制器代码):

http://pastie.org/1338126

当验证失败时,它会错误地路由到:'/chapters/1/cmets',并在页面上显示以下内容:

模板丢失 缺少模板 http://localhost:3000/chapters/1 和 {:locale=>[:en, :en], :formats=>[:html], :handlers=>[:rhtml, :rxml, :builder, :erb, :rjs]} 在视图路径 "/app/views", "", "/"

干杯

保罗

【问题讨论】:

    标签: validation rest ruby-on-rails-3 controller render


    【解决方案1】:

    对于那些未来的人,我只是遇到了类似的问题。

    地址创建操作验证失败时,我正在尝试渲染:

    render new_user_address_path(@user)
    #Normally this should work with a redirect_to or a link_to but render doesn't work this way
    

    您应该:

    render 'new'
    

    正如@ideaasylum 提到的,您不能渲染“命名助手”,但您可以渲染动作。对我来说,这似乎是 Rails 的一种特质。从技术上讲,命名路径和动作应该去同一个地方。

    【讨论】:

      【解决方案2】:

      我认为问题在于渲染调用:

      if @comment.save
        redirect_to chapter_url(params[:chapter_id])
      else
        render chapter_url(params[:chapter_id])
      end
      

      我认为传递要呈现的 URL 是不正确的(请参阅此处的 api:http://apidock.com/rails/ActionController/Base/render)。通常你打电话

      render :action => new
      

      这将呈现当前控制器的新视图。由于您要呈现章节“显示”视图(即不同控制器的视图),我认为调用应该更像:

      render :template => 'chapters/show'
      

      我的 Rails 知识有点生疏了,Rails 3 可能会改变一切。希望无论如何都能有所帮助...

      【讨论】:

      • 谢谢 Jamie,不幸的是,它仍然重定向到 'chapters/1/cmets' 我有点难过...
      【解决方案3】:

      重定向后,您必须立即返回,因为 redirect_to 不会返回。

       if @comment.save
            redirect_to chapter_url(params[:chapter_id]) and return
          else
            render chapter_url(params[:chapter_id]) and return
          end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-23
        • 1970-01-01
        • 2013-07-25
        • 1970-01-01
        • 1970-01-01
        • 2017-08-10
        • 2023-03-27
        • 1970-01-01
        相关资源
        最近更新 更多