Rails 4 - 提交后重定向到正确的URL

时间:2014-03-23 12:12:11

标签: ruby-on-rails forms validation routing

我有一个简单的注册表单。它在/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)。关于我能做些什么来实现这个目标的任何想法?

2 个答案:

答案 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,则需要重定向到新用户路径