表示谁更改了对象状态的最佳方式以及何时? (AASM)

时间:2009-11-16 01:10:56

标签: ruby-on-rails ruby aasm

现在,我正在state_last_updated_by_id字段中存储上次更新模型状态的用户,并在state_updated_at字段中存储上次更新状态的时间。然后我定义这样的方法:

  def published_at
    return unless state == 'published'
    state_updated_at
  end

  def published_by
    return unless state == 'published'
    state_last_updated_by
  end

  def nominated_for_publishing_at
    return unless state == 'under_review'
    state_updated_at
  end

  def nominated_for_publishing_by
    return unless state == 'under_review'
    state_last_updated_by
  end

这显然不会扩展(并且不是一个好的开始方法) - 这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

你有没有看过acts_as_audited plugin

设置非常简单,并且会记录触发相关表中记录更新/保存的人的时间戳,更改和用户ID。使检索最后一个用户改变状态非常简单。它也可以配置为仅在状态更改时触发。

然而,它的可扩展性可能低于您当前的处理方法,因为它会记录每次模型状态的变化。