對於Rails 3來說是相當新穎的東西,並且一直在使用谷歌搜索來解決以下問題,大多數教程都沒有處理錯誤。Rails 3 - 在多態評論模型上顯示提交錯誤
我創建了一個帶有多種內容類型/模型(例如文章,博客等)的Rails 3項目。每個內容類型都有註釋,所有內容都作爲嵌套資源存儲在一個註釋表中,並且具有多態關聯。對於評論只有一個動作,'創建'動作,因爲不需要展示等,因爲它屬於父內容類型,並且應該在提交時簡單地重新顯示該頁面。
現在我大部分工作和評論提交和發佈都很好,但最後剩下的問題是當用戶沒有填寫必填字段時顯示錯誤。如果這些字段沒有填寫,它應該返回到父頁面並顯示驗證錯誤,比如Rails通常對MVC所做的一樣。
的創建我的評論的動作控制器看起來是這樣的,這是我第一次嘗試......
def create
@commentable = find_commentable
@comment = @commentable.comments.build(params[:comment])
respond_to do |format|
if @comment.save
format.html { redirect_to(@commentable, :notice => 'Comment was successfully created.') }
else
format.html { redirect_to @commentable }
format.xml { render :xml => @commentable.errors, :status => :unprocessable_entity }
end
end
end
當你沒有填寫和提交意見的形式,該頁面不重定向到它的適當的父母,但不會顯示任何內容或閃光。現在我明白了爲什麼,據我所知,閃光燈不會持續在redirect_to上,只能在渲染上。現在,這是麻煩所在。
在註釋控制器中只有'創建'動作,所以我需要將渲染指向'blogs/show'(注意:我知道這不是多形的,但是一旦我得到這個工作,我會那麼擔心)。我想這個在上面的代碼中的「其他」塊...
else
format.html { render 'blogs/show' }
format.xml { render :xml => @commentable.errors, :status => :unprocessable_entity }
end
無論如何,當我嘗試在博客提交無效評論,我得到一個錯誤信息「顯示[...] /app/views/blogs/show.html.erb第1行出現的地方:未定義的方法'標題'爲零:NilClass。「
看着這個URL,我想我知道爲什麼......而不是直接指向/ blogs/the-title-of-my-article(我使用的是friendly_id),它會去/ blogs/the-title -of-MY-文章/評論。我認爲額外的「註釋」是拋出查詢並返回零。
那麼我怎樣才能讓頁面呈現沒有在那裏拋出額外的「評論」?還是有更好的方法去解決這個問題?
不知道它的事項或幫助,但徵求意見/博客route.rb看起來像這樣...
resources :blogs, :only => [:show] do
resources :comments, :only => [:create]
end
你是對的,當我設置一條消息如':alert =>'有字段丟失'時,消息通過下一個請求持續存在。然而,我忽略了一些使得這個問題的事情。應填寫的字段不會突出顯示(field_with_errors),上面的閃光燈也不會顯示哪些字段錯誤。第二個問題 - 具有redirect_to的較大問題是,所有填寫的字段在重定向時都會丟失,如果某個字段被忽略,那麼在用戶方面會出現問題。我谷歌搜索的大部分內容一直在說只有渲染才能支持它們。 – Shannon 2011-02-17 21:11:11
這是正確的,你可以在會話中保存失敗的`@ comment`,以便在重定向後訪問它,但這有點過分。我個人認爲最好的方法是通過AJAX保存評論。以下是一些可幫助您開始使用的資源:http://railscasts.com/episodes/74-complex-forms-part-2 http://railscasts.com/episodes/45-rjs-tips http:// www .stjhimy.com/posts/7 – 2011-02-17 21:27:45