提交表单后,我的调试功能中会显示正确的自定义参数,但是当我进入控制台时会显示默认的参数。
控制器
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'调用#
有什么想法吗?
谢谢!
答案 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
保存失败时无法显示成功。作为一般规则,在向最终用户报告成功之前,应检查保存或任何其他后端操作是否失败。