在偶然浏览了迈克尔·哈特尔教程后,我无法弄清楚为什么会发生这种情况。
当我单击提交表单并期望失败时,渲染后的预期 url 应该是"/signup",但有些原因是它是"/users"
这是我的控制器
def new
@user = User.new
end
def show
@user = User.find(params[:id])
end
def create
@user = User.new(params[:user])
if @user.save
redirect_to @user
else
render 'new'
end
这是我的路线
resources :users
match '/signup', to: 'users#new'
首先,当我单击注册链接时,网址是
http://localhost:3000/signup
然后子传失败,这个网址是
http://localhost:3000/users
谁能解释我为什么会这样?谢谢
当您发布到 UsersController 时(从注册操作创建新用户),您将调用#create
操作。如果您在该页面上查看源代码,您将看到表单操作/users
,表单方法POST
。因此,当您提交表单时,提出的请求是:
POST /users
(some data)
如果保存失败,那么您的创建操作只会呈现"新"模板。您不会被重定向到任何地方。 render :action => "new"
只是呈现new
操作的模板 - 它实际上不会重定向到新操作或运行其操作代码。
根据 routes.rb 在 rails 中的用法,routes.rb 文件中match
标签确定如果匹配,要到达哪个controller/action
。
因此,在这里,您的注册 URL 与user
控制器> new
操作匹配。但是,如果new
操作失败,则 url 不是/signup,而是控制器user
new
函数。所以网址是这样显示的。希望我说得更清楚一些。