它只发生在生产中,当我们通过浏览器更新一些记录时,没有保存更改。它似乎不是一个缓存问题,因为我们验证了mysql中的数据仍然是旧数据。但是,控制器确实被命中并返回了闪存消息,就像更改成功一样。
但是,我们可以在rails console或mysql中手动进行更改,但没有任何问题。
为什么会发生这种情况?
不过,我们最近将网站重新配置为使用SSL,它可能与此有关。答案 0 :(得分:2)
有什么东西可以防止模型被保存吗?
确保设置属性并保存模型的一种方法是使用异常提升版本,它可以帮助修复这样的问题:
def update
@model = Model.find(params[:id])
@model.update_attributes(params[:model])
redirect_to(model_path(@model))
end
这可以改进为更可靠的方法:
def update
@model = Model.find(params[:id])
# Use exception-throwing update_attributes!
@model.update_attributes!(params[:model])
redirect_to(model_path(@model))
rescue ActiveRecord::RecordNotFound
render(:partial => 'not_found')
rescue ActiveRecord::RecordInvalid
# Delegate back to edit action, something's invalid
edit
render(:action => 'edit')
end
有些情况下update_attributes可能无法成功保存。
如果您可以使用相同的方法对相同的数据执行相同的更新,那么这就是特殊的。