【问题标题】:Rails 4 - redirect to correct url after submitRails 4 - 提交后重定向到正确的网址
【发布时间】:2014-04-30 16:58:41
【问题描述】:

我有一个简单的注册表单。它在routes.rb 中定义了/signup 的url。

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

如果注册失败,我想要的是留在同一页面(使用相同的网址)。关于我可以做些什么来实现这一目标的任何想法?

【问题讨论】:

    标签: ruby-on-rails forms validation routing


    【解决方案1】:

    目前,当注册失败时,您正在呈现新操作,因此您的 url 将具有如下路径:

    /users/new

    我想你希望它看起来像 /signup

    为此,请在 create 操作中替换

    format.html { render action: 'new' }
    

    format.html { redirect_to signup_url }
    

    这种方式路径看起来像/signup,并且会调用新动作。

    【讨论】:

    • 如果我这样做,我会收到以下错误:ActionController::UnknownFormat,你知道这是为什么吗?
    • @AndersPlanting 检查我更新的答案。确保您像这样更新代码。如果您仍然收到错误,请告诉我。
    • 谢谢,现在可以了。现在的问题是我的@user 错误消息没有显示,但这可能是另一个问题,除非你有一个快速的想法?
    【解决方案2】:

    路径重定向到/users的原因是因为这是动作create的路径,如果用户保存在动作create失败,则没有重定向,它只是渲染new视图模板.

    如果你想留在/users/new,你需要重定向到新的用户路径

    【讨论】:

    • 试图将 render action: 'new' 更改为 redirect_to signup_url 但我收到以下错误:ActionController::UnknownFormat
    • 处理来自signup_url的请求的动作不知道如何处理格式(例如html,js),需要更多信息才能知道原因
    猜你喜欢
    • 1970-01-01
    • 2016-05-19
    • 2011-11-22
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 2014-03-20
    • 2011-07-08
    • 1970-01-01
    相关资源
    最近更新 更多