很多用户情景都会用到「审核」这个功能。 比如文章或评论需要先审核再发表。 比如请假需要在 OA 提交审核后批准。 可我一时又找不到合适的参考代码,不知道别人的实现思路是怎样的?
以我简单的思维,目前能想到的就是,在被审核的 model 加一个 state 字段。 比如,如果「articles」要通过「审核」才能发表,那就在 article 这个 model 加一个 integer 字段叫 state,这个是用户不可编辑的字段,
一般都怎么做的呢? 有哪些项目有这些相关的内容可以参考一下吗?
另外,我看到两个 GEM,workflow,AASM - Ruby state machines 但我在想,有没有必要用 GEM 呢?是不是把简单的问题复杂化了呢?还是我没考虑周全呢? 自己实现,不用 Gem 的话,会不会有什么坑呢?
我们网站的订单有几个状态 in_checkout
、pending
、completed
、canceled
、close
我们用了https://github.com/pluginaweek/state_machine 这个state_machine
Gem 来管理
主要是有这个几点需求:这个状态能否转变到另一个状态需要限制,在状态转换的时候需要一些回调来处理一些事务
你可以参考下 具体看你需求
如果状态只有审核和非审核,通常我会用时间:published_at,默认创建出来是 published_at 是 nil,审核过了,设置为 Time.now
如果有 2 种以上的状态,可以考虑用 state machine
@chairy11 这个 Gem 已经不维护了 在 4.1 及以下版本都是可以正常使用的 4.2 的话https://github.com/state-machines/state_machines-activerecord这个在维护 用 Gem 有时候是省事 不想自己写 人手又不够 也就用了 也有麻烦的地方 都是开源的 有可能那个作者撒手就不干了 后面维护又很麻烦 Rails 升级的时候特麻烦
不过也要看具体项目 像我做的权限管理用了six
https://github.com/randx/six 这个 Gem,GitLab 也用的这个 Gem,也很久没有更新了,因为实在是没有需要更新的地方,除非 ruby 像 python 那样出现了不向前兼容的升级,代码也简单,不用 Gem 都可以,你都可以直接抄代码。
所有,具体看情况了,是否用 Gem,用什么 Gem,这个也是 Rails 开发需要注意的地方吧