【问题标题】:how to capture the time a field is updated如何捕获字段更新的时间
【发布时间】:2012-01-29 12:58:33
【问题描述】:

我知道rails 中的updated_at 和created_ate。 但我感兴趣的是在更新另一个字段时更新模型中的字段的能力。这是我尝试过的:

在我的模型中:

protected

  def update_email_sent_on_date
    if self.send_to_changed?
      self.date_email_delivered = DateTime.now
    end
  end

在我的代码中更新相关字段的一个地方:

  distribution.send(:update_email_sent_on_date)

问题是,这似乎根本没有对我的数据库表做任何事情。我什至尝试删除对“send_to”的检查,但仍然没有。

我做错了什么?

【问题讨论】:

  • 嘿,我认为我对您其他问题的原始回答并不像应有的那样清楚。我已经修改/改进了解释。也许尝试重新阅读它并使用此方法private 而不是protected。这样你就不必使用send 来调用该方法了。

标签: ruby-on-rails ruby-on-rails-3 model-view-controller model


【解决方案1】:

您在进行更改后并没有保存它。

把方法改成这样:

def update_email_sent_on_date
  if send_to_changed?
    self.date_email_delivered = DateTime.now
    save
  end
end

或者像这样调用后保存模型:

distribution.update_email_sent_on_date
distribution.save

【讨论】:

  • 你确定在这种情况下send_to_changed? 正在评估为true 吗?或许可以尝试在 if 块内放置一个测试 puts 语句,然后重新启动您的应用程序并再次运行它,并确保它实际上正在执行该块。
  • 是的,这是罪魁祸首。但为什么?使用 _changed 的​​正确方法是什么?方法?
  • 查看ActiveRecord::Dirty上的文档:apidock.com/rails/ActiveRecord/Dirty
  • 如果您愿意,可以将update_email_sent_on_date 方法的内容压缩为:update_attribute(:date_email_delivered, DateTime.now) if send_to_changed?update_attribute 方法将更新单个属性并保存记录。 apidock.com/rails/ActiveRecord/Base/update_attribute
猜你喜欢
  • 2019-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-14
  • 2017-09-23
  • 1970-01-01
相关资源
最近更新 更多