2011-10-20 37 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

我应该澄清验证后刷新错误会呈现索引视图。但仍然令人困惑 - 用于验证错误的网址应该与填写表单的网址相同 - 或者至少我相信这会提供更好的用户体验。 –