问题标签 [acts-as-tree]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1017 浏览

ruby-on-rails - act_as_tree 不会破坏模型的孩子

我有这个任务模型:

我有这个测试

测试成功:当我销毁d1时,它会销毁d1的所有后代。因此,在销毁之后只剩下根。

但是,在我向任务添加了 before_save 回调之后,这个测试现在失败了。这是我添加到任务的代码:

当我添加此代码时,assert_equal 1, Task.count失败,带有Task.count == 4. 我认为self.childrenunderhandled_parent_id_change是罪魁祸首,因为当我注释掉该self.children.each do |sub_task|块时,测试再次通过。

有任何想法吗?

0 投票
4 回答
7372 浏览

ruby-on-rails - Rails 的 Reddit 样式的嵌套/线程/缩进注释?

我想知道是否有人已经在 Rails 中构建了一个用于线程注释的系统(因为没有更好的术语),或者我是否需要自己构建它。

如果不清楚,我指的是像 Reddit 这样的评论系统,它会自动缩进回复,使它们看起来像树的树枝(最好像 Reddit 那样进行投票)。

如果有人能指出我这样做的代码,将不胜感激。

或者也许有一个包含此功能的开源项目。

到目前为止,我还没有在 Rails 中找到一个。

另外,最好在 Rails 论坛上问这个问题,如果是这样,是哪一个?(我是 Rails 新手)

0 投票
3 回答
841 浏览

ruby-on-rails - 基于数组生成文件列表

我尝试了一些事情,但是这周我觉得我的大脑正在放假,我需要完成这件事..所以我希望有人能帮助我。

我需要根据保存到数据库中的哈希创建一个文件列表。看起来像这样:

输出应该是这样的:

  • 文件 1
  • 目录1
    • 文件2
    • 子目录1
      • 文件 3

在html中,最好是这样(用js扩展它以折叠和多选)

我正在使用 Ruby on Rails 并尝试在 RJS 模板中实现这一点。但这并不重要。您还可以帮助我提供一些详细的伪代码。

有人知道如何解决这个问题吗?


编辑

感谢大家提供这些解决方案。清单有效,我将其扩展为可折叠的解决方案来显示/隐藏目录内容。我仍然有一个问题:代码旨在在条目后面的复选框中包含完整的文件路径以进行同步。基于 sris 的解决方案,我只能读取当前文件及其子文件,但不能读取根目录的整个路径。为了更好地理解:

目前:

给我

与文本显示的值相同的复选框,例如 [x] file1 的“file1”。但我需要的是完整路径,例如 [x] file1 的“dir1/dir2/file1”。

有人有另一个提示如何添加这个吗?

0 投票
1 回答
244 浏览

ruby-on-rails - ActiveRecord 关联在提交到数据库之前是否有效?

我有一个使用充当树的模型。例如:

充当树具有以下关联:

从脚本/控制台我正在构建我的树,在构建整个树之前什么都不保存。我遇到的麻烦是,在提交到数据库之前,我无法成功导航树。调用#parent 和#sibling 会产生有问题的结果。我只能假设我错过了一些东西。

我猜这与处理关联的方式有关。我原以为内存中的 ActiveRecord 结构将是完全可导航的,但它们似乎并非如此。从强制记录到控制台,我有时注意到跨关联导航会导致数据库访问。这使得很难知道如何绕过关联。(我简要地研究了查询缓存。)其他人是如何处理这个问题的?或者你总是在你去的时候提交记录和他们的关系?这令人费解。


编辑:

似乎解决这个问题的方法是同时设置两个关系。也就是说,缺少的部分是:

这是设计使然吗?也就是说,我们总是期望设置互惠关系的两个部分吗?


编辑:

相关问题

0 投票
2 回答
1269 浏览

ruby-on-rails - 是否或可以让acts_as_tree 支持急切加载?

使用acts_as_tree 我希望能够通过一次SQL 调用预加载完整的子层次结构完整的树。为此,我在表中添加了一个 tree_id,它贯穿该树中的所有后代。

我曾探索过acts_as_nested_set(实际上是awesome_nested_set)作为一种可能性,但由于我将树移植到其他树中,我发现将嵌套集用于我的目的执行了太多更新。与acts_as_versioned 一起,这对我所追求的设计来说是一个不可接受的复杂性。就我的目的而言,我相信acts_as_tree 更适合。

我唯一的问题是抓取完整的层次结构树。ActiveRecord 的 :include 选项适用于 :children 但不适用于 :descendants。我满足于编写自己的手动检索和映射关联的方法。有关如何完成此操作的任何指导或示例?

从我的角度来看,我搁置使用树(支持抓取整个结构化树)的嵌套集的唯一好处是选择性地抓取树的任何子部分。我没关系。

我希望避免的解决方案是消除与树一起出现的 :children 关联,并定义和手动加载在每个树节点上定义的子数组。

0 投票
3 回答
866 浏览

ruby-on-rails - Acts_as_tree - 一对多:在父页面上显示与子项关联的记录

我有一个相对简单的一对多关系,并使用acts_as_tree 将其组织在视图中。它看起来像这样:

我设置它的方式是在类别的“显示”操作中列出产品。但是我似乎无法弄清楚如何显示:类别 1 的“显示”中的产品 1-5,类别 1.1 中的产品 3-5 等等......

有没有人有提示,我可以从哪里拿起它?

谢谢!瓦尔

0 投票
1 回答
333 浏览

ruby-on-rails - 是否可以使用acts_as_tree 拥有类似文件系统的路由?

我有一个Folder模型acts_as_tree

路由是否有可能代表文件夹结构?

文件夹:

路线:

这可能吗?

0 投票
2 回答
1887 浏览

ruby-on-rails - 充当具有多个模型的树

我有几个模型,我想将它们分层关联在一起。为简单起见,假设我有这三个:

在当前的acts_as_tree 下,每个节点都可以单独地与其他节点分层关联,前提是它们是相同类型的。我想要的是删除对类型标识的这种限制,以便 SomePost.parent 可以将 User 或 Post 作为其父级,并且 SomeUser.parent 可以将另一个用户或组作为其父级。

有什么想法吗?

0 投票
3 回答
9640 浏览

ruby-on-rails - 带分组的形式选择

现在有了 Formtastic,我有了简单的选择:

在这里,我只显示儿童类别。我使用acts_as_tree插件来处理父子关系。我也想显示父类别。

Formtastic 生成的选择应该如下所示:

如何在 Formtastic 中为具有acts_as_tree 功能的模型选择分组?有人知道吗?

更新

我发现这应该可行:

但它没有错误:

看起来 Formtastic 中存在一些错误。我查看了 formtastic.rb 并在detect_group_association方法中找到了 object_class:

实际上object_class在此方法中未定义,并且在 formtastic.rb 中没有具有该名称的 privat 方法。但是我们可以使用:group_association明确定义关联。

但我遇到了另一个错误:

我尝试关闭Acts_as_tree并编写我自己的自引用关联。与 Acts_as_tree 相同的作品应如下所示:

错误是一样的。有人可以帮忙吗?

更新

下一个小步骤。这段没有 Formtastic 的代码可以正常工作:

ps:top_categories 是带有父类别集合的辅助方法。

最后一件事是将它翻译成 Formtastic 语法:)

0 投票
1 回答
476 浏览

ruby-on-rails - to_xml 用于使用acts_as_tree 的完全限定树

我有一个使用acts_as_tree 的ActiveRecord 类。我正在尝试更新 to_xml 方法,以便如果调用子记录的 to_xml 它将返回嵌套在父/祖先 xml 中的 xml,以提供该资源的完全限定路径。例如,我有 Compiler,它是 Compiler/Version 的父级。编译器应呈现为 xml:

虽然编译器/版本应呈现为

我试图通过传递一个完全限定的标志来做到这一点,但它因 'Builder::XmlMarkup#to_ary should return Array' 而死

def to_xml(options={}, &block) options[:fully_qualified] ||= true options[:indent] ||= 2 options[:builder] ||= Builder::XmlMarkup.new(:indent => options[:缩进])

55: parent.to_xml(选项) 做 |foo| relative_options = options.dup relative_options[:fully_qualfied] = false relative_options[:skip_instruct] = true relative_options.delete(:builder)

66: xml.parameter(:name => name, &block) end end

该方法适用于编译器的情况,但对于编译器/版本失败:

/usr/lib/ruby/1.8/builder/xmlbase.rb:133:in method_missing' /usr/lib/ruby/1.8/builder/xmlbase.rb:133:incall' /usr/lib/ruby/1.8/builder/xmlbase.rb:133:in _nested_structures' /usr/lib/ruby/1.8/builder/xmlbase.rb:57:inmethod_missing' app/models/parameter.rb:66:在to_xml' app/models/parameter.rb:55:into_xml'