Rails视图:在使用嵌套资源进行验证失败后调用渲染后丢失模板

时间:2010-12-01 12:38:32

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

我正在尝试使用Rails 3中的失败验证。

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

http://pastie.org/1338126

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

Template is missing

Missing template http://localhost:3000/chapters/1 with {:locale=>[:en, :en], :formats=>[:html], :handlers=>[:rhtml, :rxml, :builder, :erb, :rjs]} in view paths "/app/views", "", "/"

欢呼声

3 个答案:

答案 0 :(得分: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所提到的,你不能渲染一个“命名助手”,但你可以渲染一个动作。对我来说,它看起来像铁轨的特质。从技术上讲,命名路径和操作应该到同一个地方。

答案 1 :(得分:0)

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

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

将呈现当前控制器的新视图。既然你想渲染章节'show'视图(即不同的控制器视图),我认为这个调用应该更像:

render :template => 'chapters/show'

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

答案 2 :(得分:0)

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

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