如何获取rails中首次更改特定属性的日期

时间:2016-05-11 08:58:27

标签: ruby-on-rails-4

我有一个布尔属性,其默认值为false。如何在属性更改为true时获取日期? 如果值已更改,则is_changed将为您提供。我想要首次更改属性的日期。 我如何在轨道上获得它?

4 个答案:

答案 0 :(得分:1)

在该表中添加属性'first_change',这将保存布尔属性的每个第一次更改的时间戳更改为true或false,然后在模型中写入回调,如此

before_update :check_changes

def check_changes
  if self.<boolean_attribute>.is_changed? and first_change.nil?
    self.update(first_change: Time.now)
  end
end

在此之后,您可以检查布尔属性何时更改。

答案 1 :(得分:0)

You can wrap your boolean attribute in distinct model and from there you can easily trace when specific field was initially setted up or updated. In your current model you can't trace changing state of specific attributes, only the whole object, but it's not what you need I guess.

答案 2 :(得分:0)

好吧,看起来你基本上想要JTable记录中git的功能。

有两种方式

  • 使用单独的col ActiveRecord。第一次更改changed_date时更新它。
    • 如果您的要求如此简单,我建议您这样做。不要使用较重的宝石。
  • 使用VestalVersionPaperTrail等库
    • 这些有助于跟踪记录中的每项活动。
    • 您可以跟踪每个更改,更改内容以及何时更改
    • 您也可以将记录恢复到更改后的任何时间

答案 3 :(得分:0)

我认为有两种方式,如上面的答案建议制作一个单独的字段,并在第一次更改字段时添加日期或

您可以使用Public Activity gem来记录所有带有参数的模型活动。 它根据此表创建一个活动表,您可以在第一次更改时获取字段的日期,但这是一个漫长的过程