2011-07-16 91 views
4

我目前正在通過各種Rails教程工作,但都似乎建議失敗的表單提交應該使用呈現器來輸出帶有錯誤的表單。例如,創建方法如下:在Ruby on Rails上保留失敗表單提交的URL

def create 
    @user = User.new(params[:user]) 
    if @user.save 
    flash[:success] = "Welcome to the Sample App" 
    redirect_to @user 
    else 
    @title = "Sign up" 
    render 'new' 
    end 
end 

這有預期的效果,但同時也意味着,如果我在http://localhost:3000/users/new有一個新的用戶表單和發生錯誤時,我得到的錯誤相同的形式在http://localhost:3000/users

有沒有辦法確保我去http://localhost:3000/users/new而不是?

我想過使用重定向而不是呈現'新',但這會導致顯示錶單錯誤的問題。 Rails IRC上的某些人指示我採取客戶端驗證的方式,但似乎它可以避免這個問題。

+1

我真的不明白爲什麼這種行爲是一個問題。 – Wukerplank

+0

我確定這只是我,但它似乎並不正確。不太可能和假想的情況,但如果有人向我發送一封電子郵件,說「我收到了我不應該在此頁上的錯誤:」,然後複製並粘貼了該URL,那該怎麼辦? – RobL

回答

2

我的用戶註冊表單有類似的問題。因爲我不使用REST風格的路線在那裏,我可以用下面的途徑來解決這個問題:

resources :users, :except => [:new, :create] do 
    ... 
end 
get "/signup" => "users#new" 
post "/signup" => "users#create" 

,並在新的形式:

form_for @user, :url => signup_path do ... 
+0

謝謝!想知道這是否是一個路由問題。將有一個去與此,但它看起來應該修復它! – RobL

1

嘗試redirect_to :action => 'new'而不僅僅是渲染,這將保留url,但有關錯誤的信息將會丟失(除非你把它放在flash中)。

另一種選擇是將表單提交到用於顯示它的URL。在操作開始時,檢查是否有一些數據需要處理。如果處理進行得很順利,你可以在其他地方使用redirect_to,否則你什麼也不做 - 表單會顯示出來,連同所有的錯誤。我想,這不是Railsy,但它應該按照你的意願工作。

+0

謝謝!第二個選項有幫助。我知道這不一定是Rails-y,但它至少應該處理這個問題。 – RobL

1

對不起遲到了(只有6歲)到派對上,但不知何故,這似乎是Turbolinks的問題。

查看這些問題herehere