Rails Ancestry Gem:如何编写范围以匹配所有父母



使用 Railsancestrygem , 在用户模型上编写范围以查找所有具有子项/哪些是父项的记录的最佳方法是什么?

class User < ActiveRecords::Base
has_ancestry
def is_manager?
has_children
end
scope :is_manager, -> { ... ? ... }
end

试试这个,我认为这是最好的方法

scope :is_manager, -> {where(id: User.pluck(:ancestry).compact.map { |e| e.split('/') }.flatten.uniq)}

它仅从数据库中选择祖先字段,删除 nil,拆分它并获取数字,扁平化它,使其成为 Uniq,然后基于它选择所有用户。

还要检查这个问题

与融冰的答案相同。

这样做也是如此,但它不是将所有记录从数据库加载到内存中,而是只选择唯一的祖先并处理它们 - 这应该在内存影响方面有所作为

scope :is_manager, -> { where(id: User.select(:ancestry).distinct.pluck(:ancestry).compact.map { |x| x.split('/') }.flatten.uniq) }

相关内容

  • 没有找到相关文章

最新更新