2011-10-20 31 views
4

我有一個用戶資源,其中:name是模型上的必需屬性。Rails - 在模型驗證失敗時被URL更改所困惑

如果我嘗試創建一個新的用戶沒有的名稱,然後驗證失敗和錯誤消息在表單的頂部按預期顯示,/users/new頁面的URL改變了,以/users

,當我開始與水豚玩弄的第一次,和一個驗證失敗後的預期的current_path是http://localhost:3000/users/new

我無法弄清楚,爲什麼我的天賦我沒有注意到這個問題,直到今晚不及格:

it 'should not create an invalid user' do 
    fill_in "Name", :with=>"" 
    click_button "Create User" 
    current_path.should == new_users_path 
end 

我驗證過它發生在我所有的Rails應用,所以我意識到這是鐵軌的工作方式,但我真的不明白這是怎麼回事的。它爲什麼這樣工作?驗證失敗時,爲什麼路徑從new_users_path更改爲users_path

這讓我很困惑

+0

這些操作的控制器代碼是什麼樣的? – ctcherry

回答

3

這是完全正常的。

在一個基本的CRUD中,您使用POST請求/users來創建您的用戶。

如果驗證失敗,您只需呈現edit視圖,但它不會更改網址。

要更改網址,您應該使用redirect_to但是,這樣您就會丟失與執行的驗證相關的信息。

+0

啊,我現在明白了。謝謝,這解釋了它 – stephenmurdoch

+6

恕我直言,這是一個Rails對CRUD的愛超過可用性的例子。除了URL更改之外,如果用戶在驗證錯誤之後刷新頁面,該怎麼辦?因爲您從/ users而不是/ users/new獲取路由錯誤。但是很高興知道這是公認的慣例(儘管像Square這樣的着名鐵路商店不會遵循它:嘗試強制驗證錯誤在這裏https://squareup.com/login) –

+0

我應該澄清驗證後刷新錯誤會呈現索引視圖。但仍然令人困惑 - 用於驗證錯誤的網址應該與填寫表單的網址相同 - 或者至少我相信這會提供更好的用戶體驗。 –