Rails 3应用程序在保存时抛出"未定义的方法`update_attributes'"

Jay*_*Jay 0 mysql ruby-on-rails ruby-on-rails-3

在我的控制器中,一大堆数字被碾压.百分比乘以100,因此可以将它们存储为整数.

tot = @mot[1] + @mot[2] + @mot[3]
exec_pct = @mot[3] / tot * 100
tact_pct = @mot[2] / tot * 100
strat_pct = @mot[1] / tot * 100
Run Code Online (Sandbox Code Playgroud)

然后应该将值写入用户记录,如下所示:

@user = User.where(id = current_user.id)
@user.update_attributes(:strat_pct => strat_pct.to_i, :tact_pct => tact_pct.to_i, :exec_pct => exec_pct.to_i )
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

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

谢谢你的帮助.

Gaz*_*ler 6

你的问题在这里:

@user = User.where(id = current_user.id)
Run Code Online (Sandbox Code Playgroud)

在上面,您正在将变量id赋值给current_user.id的值,在这种情况下,这不是您的意图.

如果你这样做:

p @user.class 
Run Code Online (Sandbox Code Playgroud)

然后它将返回nilClass.

你需要:

@user = User.find(current_user.id)
Run Code Online (Sandbox Code Playgroud)

要么:

@user = User.where(:id => current_user.id)
Run Code Online (Sandbox Code Playgroud)

虽然基于您的代码,current_user可能是User的一个实例.我会说你不需要再拨打任何电话,你应该可以这样做:

current_user.update_attributes(:strat_pct => strat_pct.to_i, :tact_pct => tact_pct.to_i, :exec_pct => exec_pct.to_i )
Run Code Online (Sandbox Code Playgroud)