update_attributes未保存到数据库

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

调节器

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’调用#

有任何想法吗?

谢谢!

试试代码: –

 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

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

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

这使我相信用户模型中设置其默认值的’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方法后,它会永久保存。

您应该确保没有任何validation错误。 您可以使用以下方法检查

 active_record_model.errors 

在你的情况下,它会

 current_user.errors 

此外,您应该从update_attributes打印返回值以查看它是true还是false 。 如果您收到false ,则会取消保存。 这很可能是由validation错误或返回false的回调引起的。

就像是:

 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 

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