我注意到这个问题出现了很多,但在尝试了几个推荐的解决方案后,我发现我仍然无法弄清楚出了什么问题。我有一个名为sample的模型和一个用户模型。当样本被批准时,样本上的小时应该被添加到用户总小时,但是用户值永远不会更新。每个用户都有一个唯一的电子邮件,在提交审批时存储在样本中。我检查了数据库以确保它不是访问该值的问题,并且没有抛出错误所以我不确定发生了什么。我对ruby和rails很新,所以任何帮助都表示赞赏。我的samples_controller.rb包含函数:
def approve
@sample = Sample.find(params[:id])
@sample.update(sample_status:1)
@user = User.find(Sample.email)
hours_update = @user.hours + @sample.volunteer_hours
@user.update_attributes(:hours, hours_update)
redirect_to samples_adminsamples_path
end
编辑:感谢大家的帮助,结果我需要使用命令
@user = User.find_by(email: @sample.email)
以获得适当的用户。
答案 0 :(得分:0)
应该是
@user.update_attributes(hours: hours_update)
或
@user.update_attribute(:hours, hours_update)
注意:
update_attribute
没有触发回调
答案 1 :(得分:0)
您能否提供更多数据,如样本和用户表的数据库结构。
根据有限的信息,我认为第4行(@user = User.find(Sample.email)
)就是问题所在。
.find()
尝试在id
上查询数据库,Sample.email
将提供用户的电子邮件,而不是db中相应用户的id
。 / p>
我也猜测在你的控制器中,你正在使用begin-rescue
块来抑制抛出的异常,因为.find()
如果找不到资源就会抛出ActiveRecord::RecordNotFound
异常。
或者,如果它正确地提取用户,您也可以尝试update_column
更新值。