Ruby on rails 使用update时RubyonRails未定义的方法“valid”

Ruby on rails 使用update时RubyonRails未定义的方法“valid”,ruby-on-rails,ruby,validation,Ruby On Rails,Ruby,Validation,我使用的命令与我以前在成功的项目中使用的命令相同,但现在我突然无法验证对object的任何更新。在这种情况下,User。其他一切都正常,但任何检查我的更新验证的尝试都会导致此错误- '的未定义方法'valid'' 它正在成功地查找用户,如果我跳过。有效吗?语句,然后它将更新,只是不检查任何模型验证。我最近从SQLite切换到PostgreSQL,我不确定这是否给我带来了问题。我是Ruby新手,但在这个具体问题上我找不到任何东西 请让我知道,我是否应该包括我的控制器或我的任何模型的整体,但由于我的

我使用的命令与我以前在成功的项目中使用的命令相同,但现在我突然无法验证对object的任何更新。在这种情况下,User。其他一切都正常,但任何检查我的更新验证的尝试都会导致此错误-

'的未定义方法'valid''

它正在成功地查找用户,如果我跳过。有效吗?语句,然后它将更新,只是不检查任何模型验证。我最近从SQLite切换到PostgreSQL,我不确定这是否给我带来了问题。我是Ruby新手,但在这个具体问题上我找不到任何东西

请让我知道,我是否应该包括我的控制器或我的任何模型的整体,但由于我的创建工作良好,我觉得所有的相关代码只是在这个小部分-

类UsersController
def update
    @user = User.find(params[:id])
    puts "#Is this working???!! #{@user}" ///prints #Is this working???!! #<User:0x00000001f24468>
    @user = User.update(user_params)
    if @user.valid?
        redirect_to "/users/#{@user.id}"
    else
        flash[:errors] = @user.errors.full_messages
        redirect_to "/users/#{@user.id}/edit" 
    end
  end
 private
  def user_params
    params.require(:user).permit(:name, :email, :password)
  end
你的问题是:

@user = User.update(user_params)
如果你把你的支票后,你会看到:这是工作???!!是的,这足以讽刺地告诉你它不起作用了

这是因为User.updateuser_参数根据是否成功返回true或false。这意味着您的@user对象现在只是true或false,您不能在其上调用valid

如果要成功处理更新/失败,请尝试:

def update
  @user = User.find(params[:id])
  if @user.update(user_params)
    redirect_to "/users/#{@user.id}"
  else
    flash[:errors] = @user.errors.full_messages
    redirect_to "/users/#{@user.id}/edit" 
  end
end
ActiveRecordUpdateId,属性

如果验证通过,则更新一个或多个对象并将其保存到数据库。无论对象是否成功保存到数据库,都会返回结果对象

然后,如果@user.updateuser_参数

或者,您可以直接在模型类中调用update方法,但第一个参数必须是用户ID

User.update(params[:id], user_params)

谢谢你们两位的快速回答。我回复的目的是告诉你,我已经尝试过了,但没有验证。但正如你们两位告诉我的一样,我决定再次测试,这次验证确实有效,所以谢谢你们,尽管我肯定有一位用户上一次的电子邮件是“asdf”

经过充分的思考,我找到了另一个答案,尽管我不知道它为什么有效。我在更新后添加了另一个puts语句,并意识到我的对象已转换为数组,因此我提出了另一个更糟糕的答案-

def update
    @user = User.find(params[:id])
    puts "#Is this working???!! #{@user}"
    @user = User.update(user_params)
    puts "#Is this working???!! #{@user}" ///prints #Is this working???!! [#<User id: 2, name: "James Dean", etc..>] 
    if @user[0].valid?
        redirect_to "/users/#{@user[0].id}"
    else
        flash[:errors] = @user[0].errors.full_messages
        redirect_to "/users/#{@user[0].id}/edit" 
    end
  end
def update
    @user = User.find(params[:id])
    puts "#Is this working???!! #{@user}"
    @user = User.update(user_params)
    puts "#Is this working???!! #{@user}" ///prints #Is this working???!! [#<User id: 2, name: "James Dean", etc..>] 
    if @user[0].valid?
        redirect_to "/users/#{@user[0].id}"
    else
        flash[:errors] = @user[0].errors.full_messages
        redirect_to "/users/#{@user[0].id}/edit" 
    end
  end