我使用的命令与我以前在成功项目中使用的命令相同,但现在我突然无法验证对象(在本例中为User)的任何更新。其他一切工作正常,但任何尝试检查我的更新验证都会导致此错误-
'undefined方法`有效吗?'用于# '
它是找到成功找到用户,如果我跳过。valid?语句,则它将更新,只是不检查任何模型验证。我最近从SQLite切换到PostgreSQL,我不确定这是否会给我带来问题。我是Ruby的新手,但我找不到关于这个问题的任何东西。
请让我知道,如果我应该包括我的控制器或任何我的模型的整体,但我的创建工作正常,我觉得所有的相关代码只是在这个小部分-
类UsersController〈ApplicationController
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
3条答案
按热度按时间iyr7buue1#
你的问题在这里:
如果你把支票放在后面,你会看到:
#Is this working???!! true
,这将具有讽刺意味地告诉您它不起作用。这是因为
User.update(user_params)
返回true或false取决于它是否成功。这意味着你的@user
对象现在要么是true要么是false,你不能调用valid
。如果您想处理成功更新/失败,请尝试:
flvtvl502#
ActiveRecordupdate(id,attributes)
更新一个对象(或多个对象)**并将其保存到数据库(如果验证通过)。**无论对象是否成功保存到数据库,都会返回结果对象。
然后,您可以检查
if @user.update(user_params)
或者,您可以直接在模型类中调用update方法,但第一个参数必须是用户ID
46scxncf3#
谢谢你们两个的快速回答。我回复告诉你,我已经尝试过了,它的工作,但没有验证。但正如你们中的两个人告诉我的一样,我决定再次测试它,这次验证确实有效,所以谢谢你(尽管我肯定有一个用户的电子邮件是'asdf'从上次)。
有趣的是,我找到了另一个答案,尽管我不知道为什么它会起作用。我在更新后添加了另一个puts语句,并意识到我的对象已经转换为数组,所以我想出了另一个(更糟的)替代答案: