您应该能够以编程方式通过turning the feature on for Individual Actors 完成此操作,直到达到上限。
重要提示: according to the documentation:
单个演员门通常不是为数百或
成千上万的演员被启用。这是一个明确的选择
更容易从适配器批量加载数据而不是执行
一遍又一遍地对演员进行个人检查。如果需要启用
超过 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 传入。
接下来,Feature#enable_actor 将 actor 传递给 Types::Actor.wrap,这会创建一个新的 Types::Actor 实例,它会检查以确保 actor 不是 nil 并且它有一个 flipper_id,然后设置两个实例变量,@ 987654341@设置为actor,value设置为actor的flipper_id。
现在我们有了Types::Actor 的实例,我们将它传递给Feature#enable,它会查找gate,在我们的例子中是Gates::Actor 实例。最后,我们在适配器(在您的情况下是 ActiveRecord)上调用 enable。
在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 是负责门表的活动记录类,the default table name 是“flipper_gates”。
现在我们确切地知道要查询哪些内容才能获得参与该功能的演员的数量!
number_of_actors_enrolled_in_stats_feature = Flipper::Adapters::ActiveRecord::Gate.where(
feature_key: "stats",
key: "actors"
).count