gpt4 book ai didi

ruby-on-rails - flag_shih_tzu 可以处理的最大标志数量是多少?

转载 作者:数据小太阳 更新时间:2023-10-29 07:28:52 26 4
gpt4 key购买 nike

我正在使用“flag_shih_tzu”gem,我想知道它可以处理的最大标志数量是多少,还是取决于 int。标志列的长度?
我需要它来处理 64 个标志。
可以吗?

最佳答案

我是 flag_shih_tzu 的维护者。

最佳实践:出于性能原因,用于标记的每一列最多应设置 16 个标记。您会发现,如果列包含超过 16 个标志,性能会受到太大影响。

解决方法:一个表可以有多个标志列。

我会创建一个设计如下:


class Foo ...

has_flags 1 => :is_a1,
# ... snip ...
16 => :is_a16,
:column => 'flag_col_a'

has_flags 1 => :is_b1,
# ... snip ...
16 => :is_b16,
:column => 'flag_col_b'

has_flags 1 => :is_c1,
# ... snip ...
16 => :is_c16,
:column => 'flag_col_c'

has_flags 1 => :is_d1,
# ... snip ...
16 => :is_d16,
:column => 'flag_col_d'
end

现在当你有一个 Foo 的实例时:


foo = Foo.new
foo.is_d16 = false
foo.save

现在您可以像这样检索 foo:


Foo.not_is_d16 # => [foo]

如果您还想检查同一查询中的其他标志,您应该将条件链接在一起(以按位优化的方式),如下所示:


Foo.chained_flags_with(:not_is_d16, :is_d1, :is_d4, :not_is_d11, :is_d14) # => array of Foo objects matching the conditions

现在是巨大的警告!如果您想一起使用这 4 个列,它们将需要位于 SQL WHERE 子句的不同部分,因此处于不同的事件记录关系中。

重要链接的标志只能与来自同一列的标志链接。


Foo.
chained_flags_with(:not_is_a1, :is_a2). # from flag_col_a
chained_flags_with(:not_is_b3, :is_b4). # from flag_col_b
chained_flags_with(:not_is_c8, :is_c11). # from flag_col_c
chained_flags_with(:not_is_d13, :is_d14) # from flag_col_d

就我个人而言,我从不超过每列 8 个标志,并且根据需要将我的标志分成任意多的列。

建议:将将在同一列上一起查询的属性的标志组合在一起,以充分利用按位算法。

关于ruby-on-rails - flag_shih_tzu 可以处理的最大标志数量是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18099483/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com