未定义的方法`update_attributes'?

时间:2014-01-27 21:43:24

标签: ruby-on-rails mongodb ruby-on-rails-4 mongoid

为什么会出现此错误?我没有想法。

undefined method `update_attributes' for #

代码:

exists = Vote.where(comment_id: @comment.id).exists?
    if exists
        update_vote = Vote.where(comment_id: @comment.id)
        update_vote.update_attributes(value: 5)
        redirect_to :back
    else

2 个答案:

答案 0 :(得分:7)

您想要特别提取一条记录,请告诉它:

update_vote = Vote.where(comment_id: @comment.id).first

但是如果没有匹配的话,这段代码容易出错,请注意。

答案 1 :(得分:0)

尝试使用find_by代替where。它将返回一个文档而不是Mongoid::Criteria,这就是您收到该错误的原因(您尝试在一组记录上运行.update_attributes,它作用于单个记录)。请考虑以下内容。

if update_vote = Vote.find_by(comment_id: @comment.id)
  update_vote.update_attributes(value: 5)
  redirect_to :back
else

以上代码还可以避免对.exists?进行不必要的调用,因为存在检查与定义一致(如果.find_by找不到任何匹配的记录,则返回nil ,就像.where(...).first也会这样做。)