Rails 4中的未定义方法update_attributes

Ast*_*stm 6 update-attributes

我现在正在使用Rails 4现在我想更新我的用户记录我正在尝试使用此命令

@user=User.update_attributes(:name=> params[:name], :user=> params[:username], :pass=> params[:password])
OR
@user=User.update_attributes(name: params[:name], user: params[:username], pass: params[:password])
Run Code Online (Sandbox Code Playgroud)

但总是得到错误

undefined method `update_attributes' 
Run Code Online (Sandbox Code Playgroud)

所以我如何更新我的用户我也想问它是否会更新我的数据库中的所有用户?

我想我必须添加一些条件, where id=@user.id但我不知道我怎么能在铁路上做到这一点!

Kir*_*rat 16

update_attributes是一个实例方法而不是类方法,所以首先需要在User类的实例上调用它.

获取要更新的用户:例如,假设您要更新ID为1的用户

 @user = User.find_by(id: 1)
 now if you want to update the user's name and password, you can do
Run Code Online (Sandbox Code Playgroud)

 @user.update(name: "ABC", pass: "12345678")
Run Code Online (Sandbox Code Playgroud)

要么

 @user.update_attributes(name: "ABC", pass: "12345678")
Run Code Online (Sandbox Code Playgroud)

在您的情况下相应地使用它.

有关更多参考,请参阅Ruby on Rails指南.

您可以使用update_all方法更新所有记录.它是一个类方法,因此您可以将其称为以下代码将更新所有用户记录的名称并将其设置为"ABC"User.update_all(name:"ABC")


小智 11

似乎“ update_attributes ”方法不再起作用了!您必须像这样使用“更新”方法:

@user=User.update(:name=> params[:name], :user=> params[:username], :pass=> params[:password])
Run Code Online (Sandbox Code Playgroud)