【问题标题】:How to track WHEN a model attribute changes using Rails 4?如何使用 Rails 4 跟踪模型属性何时更改?
【发布时间】:2014-07-25 09:43:15
【问题描述】:

我需要找到一种方法来跟踪模型属性从一种状态变为另一种状态的特定时刻。

  • 例如,假设我有一个List 模型,其属性名为 voting_status,可以是truefalse
  • 该属性可以由列表的所有者通过按下来更改 从truefalse 的按钮,以便其他用户可以开始投票。
  • 一旦第一个用户投票,voting_status 就会变回并且 其他用户无法再投票,即使他们一开始就没有机会投票。
  • 所以我想做一个if 语句来检查用户是否在所有者单击按钮的那一刻和现在使用另一个我称为Vote 的模型进行投票,该模型跟踪投票的用户和项目已投票。
  • 伪代码如下所示: vote = Vote.find_by(user_id: 4) list = List.find(5) if vote.created_at is_between list.voting_status_changed?(from: true, to: false).when..DateTime.now user cannot vote else user can vote end
  • 很遗憾,我没有找到任何when 方法或类似方法可以返回所有者单击该按钮的日期,从而更新属性。

有什么想法吗?谢谢。

【问题讨论】:

  • 时间戳改变时更新?使用操作和时间戳创建审核日志?使用现有的审计日志 gem?
  • 审核日志?听起来很有趣 :) 我以前从来没有用过,所以如果你知道一个好的起点,请告诉我。
  • 其实,我也在考虑创建另一个模型来跟踪所有者每次单击按钮的时间。
  • CollectiveIdea's Audited,另一个我发现非常适合这种情况的宝石github.com/collectiveidea/audited
  • 谢谢拉杰。我会看看并尝试整合它。

标签: ruby-on-rails activerecord ruby-on-rails-4 model


【解决方案1】:

您将需要使用以下 gem 之一来跟踪更改。

Espinita

Papertrail

Miks' Audited

上面提到的所有宝石都适合你

编辑:我没用过,不过你也可以试试Public ActivityGem。

【讨论】:

  • Espinita 完成了这项工作!非常感谢!
【解决方案2】:

有可审核的 Gem,可以为您解决问题。虽然还有很多其他类似的功能,请参阅相关部分https://www.ruby-toolbox.com/projects/auditable

【讨论】:

  • 谢谢,但 Auditable 在 Rails 4 中不起作用,因为与 ActiveRecord 相关的一些依赖项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多