- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 Rails 很陌生,并且对这个问题的逻辑有点困惑。
我有一张员工表(使用mysql),每个员工都有一个manager_id
键,该键指的是他们向其汇报的员工。例如,标题为“CEO”且 id 为 1 的员工的 manager_id 为 nil,标题为“CTO”的员工的 manager_id 为 1。所以我的记录如下所示
id: 1, first_name: "Bob", last_name: "Boss", title: "CEO", manager_id: null
id: 2, first_name: "Pat", last_name: "Guy", title: "CTO", manager_id: 1
id: 3, first_name: "John", last_name: "Dude", title: "VP of engineering", manager_id: 2
我的 JSON 结构应该如下所示
[
{id: 1, first_name: "Bob", last_name: "Boss", title: "CEO", manager_id: null, descendents: [
{id: 2, first_name: "Pat", last_name: "Guy", title: "CTO", manager_id: 1, descendents: [
{id: 3, first_name: "John", last_name: "Dude", title: "VP of engineering", manager_id: 2, descendents: [....]}
]},
{..more CEO descendents...}
]
我正在尝试创建一个从 CEO 开始的嵌套 JSON 结构,列出向他们报告的所有员工以及每个员工的后代。我试图编写一个脚本来创建它,但我不断收到无限的递归调用。这就是我所拥有的
#start at some root
@root = Employee.find_by title: 'CEO'
#convert to hash table
@results[0] = @root.attributes
#add direct_reports key
@results[0]["direct_reports"] = []
def getBelow(root=@root)
@reports = Employee.where("manager_id = ?", @root[:id])
if @reports.blank?
return []
else
@reports = @reports.map(&:attributes)
@reports.each do |person|
person["direct_reports"] = []
getBelow(person)
end
@reports = Employee.where("manager_id = ?", @root[:id])
root["direct_reports"] = @reports
end
return @root
end
@list = getBelow(@results[0])
如果我传入每个新的 person 对象,当 @reports.blank 变为 true 时,它们最终是否都应该结束?
?
我想到的另一种选择是使用受这篇博文启发的表关联
https://hashrocket.com/blog/posts/recursive-sql-in-activerecord
但这似乎有点太复杂了。
最佳答案
getBelow方法中的一些问题
您始终使用@root,而不是使用参数(root)。所以你总是从“CEO”重新开始。
您正在递归调用 getBelow,但没有使用结果。
您调用 @reports = Employee.where("manager_id = ?", @root[:id])
两次。
您返回@root。
正如 Jorge Najera 所说,有些 gem 可以轻松处理树结构。如果您想自己构建它,这是我的建议:
#start at some root
@root = Employee.find_by manager_id: nil
#convert to hash table
@tree = @root.attributes
#add direct_reports key
@tree["direct_reports"] = getBelow(@root)
def getBelow(manager)
branch = []
Employee.where("manager_id = ?", manager.id).each do |employee|
node = employee.attributes
node["direct_reports"] = getBelow(employee)
branch << node
end
branch
end
这尚未经过测试,因此我认为您会遇到一些错误,但我相信这个想法很好。
关于mysql - RoR,需要在表关联中创建递归关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49415060/
我已经使用 RailsInstaller 安装了 Ruby on Rails,还在 Windows 8 中安装了 postgresql。我正在尝试使用文件运行 rails server,但我收到错误消
我正在尝试关注 Ryan Bates RailsCast #196: Nested model form part 1 。 Ryans 版本有两个明显的区别:1)我使用的是内置脚手架,不像他使用的那么
你好,我通过内部连接获取了重复的数据行。我编写了带有 OR 条件的内部连接。 Controller userscontroller.rb @users = User.search(params[:se
我已经创建了一个表,现在我想给表添加一个关联(has_many 关系)。如果我已经创建了一个表并且在创建模型后已经完成了 rake db:migrate,我该怎么办? 在ror中创建表后是否可以添加关
我正在尝试将数据插入 ROR 中的数据库,对于电话号码,我采用了字段整数..但它只采用了 9 位数字..如果我尝试输入 10 位数字。它提供错误作为。 Mysql2::Error: Out of ra
如何获得事件项目菜单?循环生成菜单 我想为这个项目使用其他 css 属性。有任何想法吗?最好是js,jquery... 最佳答案 link_to_unless_
我正在编辑设计生成的用户模型,为用户添加一个语言字段,他可以在其中添加他从组合框中所说的一种或多种语言。 我的问题是在 mysql 中表示这一点的最佳方式是什么。我不知道他会说多少种语言,所以可能最多
我对 Rails 很陌生,并且对这个问题的逻辑有点困惑。 我有一张员工表(使用mysql),每个员工都有一个manager_id键,该键指的是他们向其汇报的员工。例如,标题为“CEO”且 id 为 1
那里的例子很少,但没有一个是非常清楚的(或在旧版本上)。 我想调用 MySQL 过程并检查返回状态(在 rails 4.2 中)。我看到的最常见的方法是调用 result = ActiveRecord
我在 /public 下有一些静态错误页面,我在其中按以下方式链接了一个名为 errors.min.css 的样式表: 但是,当我在除根路径 (/abc/non-existent-url) 之外的路
我想在 RoR 中将一张图片叠加在另一张图片上。 在纯 html 中这样做很容易(来自 https://stackoverflow.com/a/1997397/1760830 ): 当
我正在努力将静态站点引入 ruby on rails 应用程序,以便我们可以构建功能等。 我已经使用页面 Controller 设置了所有静态页面,并将所有静态页面存储在 View /页面下...
我在表格中有一个单元格,看起来像 我想编写一个 CSS 类,根据 play_result.status 的值更改此单元格的字体颜色,绿色代表字符串“OK”,橙色代表“CHANGED”,蓝色代表“
我正在尝试绑定(bind)帖子搜索页面上的类别下拉列表。下拉菜单应将类别图像显示为下拉菜单中类别名称左侧的图标。 下一行绑定(bind)所有类别并在下拉列表中显示它们的名称: 'Any') %> 我
在 Ruby 代码的 TextField 中,我想在模糊事件中检查指定的类是否被应用。请建议一些技术或方法。下面给出了我使用的示例代码。 TextField 的 Ruby 代码:: 4, :t
试图弄清楚 Ruby On Rails 中如何处理并发。 如何获取一段代码来锁定数据库中的行并在需要时强制回滚? 更具体地说,有没有办法强制某一段代码完全完成,如果不回滚?我想在我的项目中为交易添加历
我们正在开发一个 Rails 应用程序,其中一类用户可以编辑和创建文章。有时这些文章包含指向网站上其他文章的链接。执行以下操作的最佳方法是什么? 将链接存储在数据库中 在页面上呈现链接 目前我们有绑定
我有以下 ROR 代码 def func (point,c,r) res=isPointInCircle(point,c,r) #returns true/ false if
如何在 Rails 3.0 中使用 MD5 加密字符串?模型中的 pass = MD5.hexdigest(pass) 产生 未初始化的常量 MyModel::MD5 最佳答案 为此,您可以使用 Ru
我正在寻找有关监控每天大约有 250,000 次插入的特定表的建议。规模不大,但增长迅速,我们不能像现在这样继续工作。 主要应用程序依赖于带有 MySQL 数据库的 RoR4。数据从多个 Radius
我是一名优秀的程序员,十分优秀!