2011-06-07 25 views
0

我最近遇到了一些問題,因爲服務內容基於current_page而導致對象無法保存?方法。我使用的是近腳手架控制器:Rails 3 - 渲染:模板與current_page不一樣嗎?

def create 
@topic = Topics.new(params[:topic]) 

respond_to do |format| 
    if @topic.save 
    format.html { redirect_to(topic_links_path(@topic), :notice => "New Topic Created") } 
    else 
    format.html { render "new" } 
    format.xml { render :xml => @topic.errors, :status => :unprocessable_entity } 
    end 
end 

的問題是,如果驗證失敗,就被逮住,然後簡單地呈現我的新模板。您不在new_topic_path路由位置,導致我的視​​圖助手提供錯誤的內容。

如果我@topic確實無法保存,我可以做一個redirect_to的,但我不知道如何維護和重定向後顯示錯誤?

無論如何,尋找一些優雅的方式來做到這一點的幫助。

編輯爲澄清:

基本上,我在做什麼是基於服務的CURRENT_PAGE的不同的工具欄。所以dev.app:3000/topic/new有不同於dev.app:3000/topic的工具欄。

對於我的控制器,如果@topic未能保存,它將呈現新的動作,但仍會轉到dev.app:3000/topics路徑而不是保留在/ topics/new路徑上,因此顯示錯誤的工具欄。

回答

4

你應該重新考慮你的自定義工具欄顯示的東西是如何工作的,而不是使用current_page?你應該使用action_name,並檢查它是否等於newcreate

+0

大, !這是我需要的。萬分感謝。 – Kombo 2011-06-07 20:49:12

+0

絕對同意這個答案,但問題讓我好奇,爲什麼它不呈現在/新路徑中的HTML?您顯然可以重定向到新的_ * _路徑,但會丟失錯誤信息。 – 2011-06-07 20:51:31

+0

因爲在'new'觀點的帖子,其按照鐵路的REST約定'create'行動的形式 - 使用相同的URL'index'(但它是一個POST而不是GET)。 – smathy 2011-06-07 21:00:19

0

而是重定向呼叫:

render :action => :new