我有一个简单的注册表单。它在/signup
中定义了routes.rb
的网址。
match '/signup', to: 'users#new', via: 'get'
问题是,当我按无效字段提交时,它会重定向到/users
。
我的控制器动作(脚手架)看起来像这样:
def create
@user = User.new(user_params)
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render action: 'show', status: :created, location: @user }
else
# Here it redirects to /users
format.html { render action: 'new' }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
如果注册失败,我想要的是保持同一页面(使用相同的URL)。关于我能做些什么来实现这个目标的任何想法?
答案 0 :(得分:4)
目前,当注册失败时,您正在呈现新操作,因此您的网址将具有以下路径:
/users/new
我想你希望它看起来像/signup
而不是
为此,请在create
操作替换
format.html { render action: 'new' }
使用
format.html { redirect_to signup_url }
这种路径看起来像/signup
,并且会调用new new。
答案 1 :(得分:1)
路径重定向到/users
的原因是因为这是行动路径create
,如果用户保存在操作create
中失败,则没有重定向,它只是渲染new
视图模板。
如果您想留在/users/new
,则需要重定向到新用户路径