Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails呈现:表单数据无效时对不同url的新更改_Ruby On Rails - Fatal编程技术网

Ruby on rails Rails呈现:表单数据无效时对不同url的新更改

Ruby on rails Rails呈现:表单数据无效时对不同url的新更改,ruby-on-rails,Ruby On Rails,我的用户控制器中有以下代码 class UsersController < ApplicationController def new @user = User.new end def create @user = User.new(user_params) @user.role = 'employee' if @user.save redirect_to jobs_path else render :new

我的用户控制器中有以下代码

class UsersController < ApplicationController
  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    @user.role = 'employee'
    if @user.save
      redirect_to jobs_path
    else
      render :new
    end
  end

  private

  def user_params
    params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation)
  end
end
class UsersController
我有以下路线

resources:users,only:[:new,:create]


现在当我访问
http://localhost:3000/users/new
并提交包含正确数据的表单,然后一切正常。但如果表单验证失败,则上面的url将更改为
http://localhost:3000/users
。由于我的路线中没有
/users
,如果我按上面url的enter键,我将得到404。有没有办法保持
http://localhost:3000/users/new
当表单无效时,而不是将其更改为
http://localhost:3000/users
?将
render:new
更改为
redirect\u to new\u user\u path
将解决此问题,但随后我将丢失表单对象的所有错误,并且无法向用户显示任何错误消息。

对于您的问题,您可以使用下面的示例中的put参数重定向到new\u user\u path 如果rails无法保存@user,那么它将在@user.errors中保存错误 您可以查看下面的消息等内容,向用户显示

  def create
    @user = User.new(user_params)
    @user.role = 'employee'
    if @user.save
      redirect_to jobs_path
    else
      redirect_to new_user_path(messages: @user.errors.messages)
    end
  end
在新表单中,您可以检查是否使用params[:messages]


为了更好地管理显示错误消息,您可以检查

我将代码更改为@user.errors.messages,它将直接显示所有错误