2010-12-01 43 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