新手问题 Rails 有关 Routes 的问题

Perry · 2014年11月03日 · 最后由 Perry 回复于 2014年11月03日 · 1866 次阅读

在 RUBY ON RAILS TUTORIAL (3RD ED.) 的 Chapter 7 Sign up (https://www.railstutorial.org/book/sign_up) 里,提交 Sign up form 后会 POST 至 /users,但是如果有错误则会直接在 /users render :new 的话我总觉得有点不妥(我觉得应该还是得返回 :new),但尝试 redirect_to :new 之后发现错误不会显示(即没有 @user)。尝试在 redirect_to 后面加 parameter 最后还是失败了。是我的逻辑有问题还是应该有更好的方法解决?

@Perry 看一下 rails 的官方 doc

Call render to create a full response to send back to the browser
Call redirect_to to send an HTTP redirect status code to the browser

redirect_to 会直接重新 call UsersConroller#new, 此时@user就是一个新的 object, 它的 errors 是 nil 如果是 render, @user还是原来的 object, 错误在 errors 里,所以可以显示

#1 楼 @JIAZHEN  的确是这样的,但是怎样既能让页面回到 /signup 又可以继承 @user?我目前想到的就是把 create path 改为 POST /signup 而不是 POST /users

@Perry 可行。但是为什么要这么做呢?提交表单后的 action 确实是 create user,这样修改不符合 design pattern

#3 楼 @JIAZHEN 我觉得提交表单后的 URL 确实应该和表单的 URL 一致。当然如果是 API 的话确实应该 POST /users

你可以把错误信息放到 flash 中 但不提倡这么做

是的,如果实在不适应的话,尝试 form_for(@user, :remote => true ...,用 Ajax 表单去搞定比较完美

需要 登录 后方可回复, 如果你还没有账号请 注册新账号