update_attributes未保存到数据库

时间:2012-12-30 19:33:25

标签: ruby-on-rails ruby-on-rails-3 update-attributes

提交表单后,我的调试功能中会显示正确的自定义参数,但是当我进入控制台时会显示默认的参数。

控制器

def update
    current_user.update_attributes(params[:user])
    flash[:success] = "Your settings have been saved!"
    render new_status_update_path
end                                         

模型

attr_accessible :deficit_pct,
              :target_bf_pct,
              :activity_factor

注意:

  • 我在SO上找到的最接近的问题是一个改变通过关联存在的对象属性的问题。

  • 我尝试过使用Object.update方法,但我收到的错误是:

    私有方法`update'调用#

有什么想法吗?

谢谢!

4 个答案:

答案 0 :(得分:4)

尝试代码: -

def update
    if current_user.update_attributes(params[:user])
        flash[:success] = "Your settings have been saved!"
        render new_status_update_path
    else
        p 111111111111
        p  current_user.errors.inspect
    end
end

检查您的日志以查找该活动记录的任何errors.exist

答案 1 :(得分:3)

在控制台中玩完之后,我发现即使我手动更改属性,退出控制台后属性也不会“粘住”。

所以我将进入控制台,更改用户属性,测试它们,然后它们将被更改。如果我存在并重新进入,那么测试它们,它们将恢复到默认值。

这使我相信用户模型中设置其默认值的'after_initialize'方法在每次保存后运行。我虽然它只会在第一次保存对象后才会运行,但现在我知道它每次保存时都会运行。

after_initialize :default_values 

def default_values
  self.goal = "Cut"
  self.measurement = "US"
  self.bmr_formula = "katch"
  self.fat_factor = 0.655
  self.protein_factor = 1.25 
  self.deficit_pct = 0.10
  self.target_bf_pct = 0.10
  self.activity_factor = 1.3
end

删除所有这些值和after_initialize方法后,它会永久保存。

答案 2 :(得分:1)

您应该确保没有任何验证错误。您可以使用以下方式检查它们:

active_record_model.errors

在你的情况下,它将是

current_user.errors

此外,您应该打印update_attributes的返回值,看看它是true还是false。如果您获得false,则会取消保存。这很可能是由验证错误或返回false的回调引起的。

答案 3 :(得分:1)

类似的东西:


def update
    if current_user.update_attributes(params[:user])
        flash[:success] = "Your settings have been saved!"
        render new_status_update_path
    else
        some_error_handling_code
    end
end

保存失败时无法显示成功。作为一般规则,在向最终用户报告成功之前,应检查保存或任何其他后端操作是否失败。