Rails update_attribute没有命中mysql数据库

时间:2009-10-11 15:37:10

标签: mysql ruby-on-rails ruby ssl

它只发生在生产中,当我们通过浏览器更新一些记录时,没有保存更改。它似乎不是一个缓存问题,因为我们验证了mysql中的数据仍然是旧数据。但是,控制器确实被命中并返回了闪存消息,就像更改成功一样。

但是,我们可以在rails console或mysql中手动进行更改,但没有任何问题。

为什么会发生这种情况?

不过,我们最近将网站重新配置为使用SSL,它可能与此有关。

1 个答案:

答案 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可能无法成功保存。

如果您可以使用相同的方法对相同的数据执行相同的更新,那么这就是特殊的。