您应该能够通过以编程方式为单个 Actor 启用该功能来完成此操作,直到达到上限。
重要提示: 根据文档:
单个参与者门通常不是为启用数百或数千个参与者而设计的。这是一个明确的选择,可以更轻松地从适配器批量加载数据,而不是一遍又一遍地对参与者执行单独的检查。如果您需要为超过 20 个人启用某项功能,我建议您使用组。
既然我们已经同意无论如何我们都想继续前进。让我们谈谈实施。
为演员启用该功能
您需要做的第一件事是确保参与者(可能是用户)做出响应,flipper_id
并且flipper_id
每个参与者都是唯一的。设置完成后,您应该能够在用户看到这样的横幅时简单地为他们启用该功能:
flipper[:stats].enable_actor user
计算参加功能的演员
现在,为了确定是否应该为用户启用该功能,我们需要确定有多少用户注册了该功能。
为此,我们可以直接查询 Gate:
Flipper::Adapters::ActiveRecord::Gate.where(
feature_key: "stats",
key: "actors"
).count
这将返回一个功能中注册的演员数量的计数。
我们怎么知道它有效?
好吧,让我们来看看宝石。
flipper[:stats].enable_actor
实际上调用我们之前传入Feature#enable_actor
的user
(响应flipper_id
)作为actor传入。
接下来,将创建一个新的 Types::Actor 实例Feature#enable_actor
的 actor 传递给Types::Actor.wrap
该实例,该实例检查以确保该 actor 不是 nil 并且它具有一个 Flipper_id,然后设置两个实例变量,thing
这些变量设置为该 actor,value
它是设置为flipper_id
演员的。
现在我们有了 的实例Types::Actor
,我们将它传递给Feature#enable
which 查找gate
在我们的例子中是一个Gates::Actor
实例。最后,我们在适配器上调用enable(在您的情况下是 ActiveRecord)。
在Adapters::ActiveRecord.enable
我们首先看看gate.data_type
在我们的例子中,是:set
。从那里我们做:
@gate_class.create! do |g|
g.feature_key = feature.key
g.key = gate.key
g.value = thing.value.to_s
end
如前所述,在哪里thing.value
是flipper_id
. 答对了!@gate_class
是负责门表的活动记录类,默认表名是“flipper_gates”。
现在我们确切地知道要查询什么来获取参加该功能的演员的数量!
number_of_actors_enrolled_in_stats_feature = Flipper::Adapters::ActiveRecord::Gate.where(
feature_key: "stats",
key: "actors"
).count