ruby-on-rails - Rails 中的强制二进制矩阵公司结构实现

标签 ruby-on-rails ruby algorithm postgresql binary-tree

我正在开发一个 Rails 项目,该项目使用二元矩阵计划模式对公司结构进行建模。每个新用户都“放置”在层次结构中,如下所示:

User insertion algorithm

没有平衡,必须在进入下一个之前填充所有级别。插入新成员时,只有插入顺序很重要。 我们的数据库系统是 Postgres。

我打算使用一些 gem 来帮助我实现树(Closure Tree 是一个坚定的候选人)但我不确定如何处理这个“强制二叉树”的约束(插入、删除)从左到右'模型。

我正试图弄清楚这一切,但由于我从未参与过此类实现(特别是涉及数据库),我想我可以从更有经验的程序员那里获得一些帮助,以解决常见的陷阱或我应该特别注意的地方.预计用户群会快速增长,所以我很担心性能。

所以我的问题:

  • 由于我一直使用关系数据库,因此对该模式建模的最佳方式是什么?
  • 是否有任何文档或 gem 可供我深入研究以了解实现我需要的所有算法的最佳方法?

提前感谢您提供任何提示/指示。

最佳答案

这是对我有用的解决方案。

  1. 创建您的 Rails 应用程序并将 Postgresql 指定为数据库。

  2. 将 acts_as_sane_tree gem 添加到您的 gemfile。

  3. 使用 parent_id 列为您的用户生成模型 作为外键。

  4. 数据库迁移文件应该是这样的

    class CreateUsers < ActiveRecord::Migration[5.0]
      def change
        create_table :users do |t|
          t.string :name
          t.integer :parent_id
          t.timestamps
        end
      end
    end
    
  5. 您的模型应具有以下方法:

    class User < ApplicationRecord
        acts_as_sane_tree :order => "name"
    end
    

您可以从以下链接找到更多信息:

https://github.com/chrisroberts/acts_as_sane_tree

http://www.gmarik.info/blog/2012/recursive-data-structures-with-rails/

关于ruby-on-rails - Rails 中的强制二进制矩阵公司结构实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24580216/

相关文章:

ruby-on-rails - 如何从所有 I18n 后端获取所有翻译

mysql - `require' : Incorrect MySQL client library version

ruby - 如何禁用 NewRelic 日志

algorithm - 设置值使用逻辑

algorithm - 真的很难理解后缀树

ruby-on-rails - 如何将 SimpleForm 输入配置为默认为无包装器

ruby-on-rails - Rails gem "friendly_id": How to get a live preview of the slug, 在它的对象被创建之前

javascript - Rails : POST 422 (Unprocessable Entity) in Rails? 由于路线或 Controller ?

ruby-on-rails - 在特立独行者上安装 redcarpet gem

c++ - HSV (0 .. 255) 到 RGB (0 .. 255)