我有一个用户资源,其中:name是模型上的必需属性。
如果我尝试创建一个没有名称的新用户,则验证失败并且错误消息按预期显示在表单顶部,但页面的 URL 从/users/new, 变为/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
Run Code Online (Sandbox Code Playgroud)
我已经验证它发生在我所有的其他 rails 应用程序中,所以我意识到这就是 rails 的工作方式,但我真的不明白这里发生了什么。为什么它会这样工作?为什么验证失败时路径会从new_users_path变为users_path?
这让我非常困惑
这是完全正常的。
在基本的 CRUD 中,您使用 的POST请求来创建用户/users。
如果验证失败,您只需渲染edit视图,但不会更改 url。
要更改 url,您应该redirect_to这样做,但是这样您就会丢失与执行的验证相关的信息。