2010-12-01 78 views
0

我想失败的验证工作中的Rails 3Rails的观点:缺少模板后呈现称为继嵌套资源

我有一个章节的资源,以嵌套评论验证失败。总共只有一种观点;从chapters_controller,其中包含一个表来发表新评论并指向comments_controller创建动作如下所述放映视图(包括控制器代码):

http://pastie.org/1338126

当验证失败

,它错误地路由到: '/章节/ 1 /评论',并显示在页面上执行以下操作:

 
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", "", "/" 

欢呼

保罗

回答

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 

这将呈现当前控制器的新视图。既然要渲染章节“秀”视图(即不同的控制器的观点),我想呼吁应该更像:

render :template => 'chapters/show' 

我的Rails的知识是有点生疏,事情可能与已经改变Rails 3.希望无论如何帮助...

+0

由于杰米,不幸的是,它仍然重定向到“章节/ 1 /评论” 我有点难倒... – 2010-12-02 13:03:08

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提到的,你不能呈现一个“命名助手“,但你可以呈现一个动作。对我来说,这似乎是一个铁轨的特质。从技术上讲,命名的路径和行动应该去同一个地方。

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