Rails - 在模型验证失败时因URL更改而混淆

时间:2011-10-20 23:00:00

标签: ruby-on-rails

我有一个用户资源,其中:name是模型的必需属性。

如果我尝试创建一个没有名称的新用户,则验证将失败,错误消息将按预期显示在表单顶部,页面的网址从/users/new更改为/users

直到今晚我第一次开始玩capybara时,我才注意到这种行为,并且在验证失败后期待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应用程序中,所以我意识到这是rails工作的方式,但我真的不知道这里发生了什么。它为什么这样工作?当验证失败时,为什么路径会从new_users_path更改为users_path

这让我非常困惑

1 个答案:

答案 0 :(得分:3)

这是完全正常的。

在基本CRUD中,您使用POST /users请求创建用户。

如果验证失败,您只需呈现edit视图,但不会更改网址。

要更改网址,您应该redirect_to但是,这样您就会丢失与执行的验证相关的信息。