2012-05-27 27 views
0

當我檢查我的錯誤信息是否正常工作時,我注意到在POST(create操作)後,我的重定向轉到/businesses而不是/businesses/new。我正在使用常規RESTFUL路線,但我需要它在POST時返回/businesses/new,因爲它們是錯誤的。我怎樣才能做到這一點?創建操作重定向到錯誤的頁面?


這是我當前的代碼:

def create 
    @business = Business.new(params[:business]) 
    if @business.save 
    redirect_to :back, :notice => "You have successfully added a new business." 
    else 
    render :action => 'new', :notice => "Please try again." 
    end 
end 

回答

1

如果驗證失敗,則不應重定向。這是我應該做的,以保持在同一頁面上。

def create 
    @business = Business.new(params[:business]) 
    if @business.save 
    redirect_to businesses_path 
    else 
    render :new 
    end 
end 
+0

我的代碼基本上是一樣的。對不起,我沒有包括它。當我編輯我的答案時,您可以查看我的代碼。 – LearningRoR

+0

你確定它通過了else子句嗎? – Chamnap

+0

嗯。看起來實際上並沒有這樣做。我想知道我該如何解決這個錯誤?在POST後它立即停止在'/ business'上。 – LearningRoR

1

它實際上不是重定向。如果您再檢查一下你的表單生成的HTML代碼,你會看到這樣的事情:

<form accept-charset="UTF-8" action="/business" 
     class="new_business" id="new_business" method="post"> 

這意味着請求的頁面加載不是「/企業/製造」,但「/業務」。這就是您在瀏覽器的地址欄中看到它的原因。這與創建操作中的重定向無關。你只需渲染前一個表單。這不是一個錯誤,它實際上是在工作,也許有點混亂,但我認爲這不是什麼大問題。有了一些JavaScript,如果真的需要,你可以糾正它。

+0

有趣。我在窗體上看到了這個('action =「/ business」')。這是必須的,因爲我遇到了問題,我的'page_header'部分保留在頁面上。也許是因爲我使用簡單的表單和simple_form-b​​ootstrap gem,導致它執行此操作。 – LearningRoR

+0

也許將您在瀏覽器中看到的內容複製到答案中。 – Matzi