我正在尝试使用Rails 3中的失败验证。
我有一个章节资源,带有嵌套注释。总共只有一个观点;来自chapters_controller的show视图,其中包含一个发布新注释的表单,并指向comments_controller创建操作,如下所示(包含控制器代码):
验证失败时,错误地路由到:'/ 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", "", "/"
欢呼声
保
答案 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