加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 03:05:39 所属栏目:百科 来源:网络整理
导读:我正在使用“flag_shih_tzu”gem,我想知道它可以处理的最大标志数量是多少,还是取决于int.标志栏中的长度? 我需要它来处理64个标志. 它可以? 解决方法 我是flag_shih_tzu的维护者. 最佳实践:出于性能原因,用于标志的每列最多应设置16个标志.你会发现,对于
我正在使用“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个标志,并将我的旗帜分成尽可能多的列.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读