【问题标题】:Rails update_attribute did not hit the mysql databaseRails update_attribute 没有命中 mysql 数据库
【发布时间】:2009-10-11 15:37:09
【问题描述】:

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

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

任何想法为什么会发生这种情况?

顺便说一句,我们最近重新配置网站以使用 SSL,这可能与此有关。

【问题讨论】:

  • 如果您能提及以下内容可能会有所帮助:Rails 版本、MySQL 版本、发布控制器代码、保存模型时在旁边运行的任何其他代码(before_save、任何观察者等)。
  • 粘贴更新记录的代码...
  • 可能是你已经离开并且 attr_protected / attr_accessor 'd 你的模型。
  • 你的模型是changed?在你保存之前吗?

标签: mysql ruby-on-rails ruby ssl


【解决方案1】:

有什么东西可以阻止模型被保存吗?

确保设置属性并保存模型的一种方法是使用异常引发版本,它可以帮助解决以下问题:

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

如果您可以使用相同的方法对相同的数据执行相同的更新,那么这很奇怪。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多