Rails .update_attribute不更新

时间:2017-04-11 04:00:30

标签: ruby-on-rails

我注意到这个问题出现了很多,但在尝试了几个推荐的解决方案后,我发现我仍然无法弄清楚出了什么问题。我有一个名为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)

以获得适当的用户。

2 个答案:

答案 0 :(得分:0)

您使用update_attributes

的格式不正确

应该是

@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更新值。