-1

嘿,我正在尝试在我的第一个 Rails 项目中为嵌套集实现拖放界面。我是 Rails 新手,所以请耐心等待。我的代码与这个项目基本相同: http://gist.github.com/128779。我的问题在于这一行的部分:

<% for child in root.direct_children do %>

我得到一个 NoMethodError ,我相信direct_children它是 的实例方法。acts_as_nested_set在控制台上,如果我尝试创建模型的新实例,它同样无法访问acts_as_nested_set实例方法,所以我认为问题不在于部分,而在于模型。

再次抱歉,如果我的术语有误,我是 Rails 新手。无论如何,我做错了什么?我的模型中有“ acts_as_nested_set”,就像上面的要点示例一样,但我的模型似乎没有充当嵌套集。我该如何解决这个问题?

谢谢!

这是我正在使用的模型的代码(todo.rb):

class Todo < ActiveRecord::Base
  acts_as_nested_set
end

这是部分内容:

<% content_tag :li, :id => dom_id(root) do %>
    <%= content_tag :span, root.text %>
    <% content_tag :ul do %>
        <% for child in root.direct_children do %>
            <%= render :partial => "tree", :locals => {:root => child}%>
        <%end %>
    <%end unless root.direct_children.empty? %>
<%end%>

root从视图传递给局部,例如:

<%= render :partial => "tree", :locals => {:root => @root} %>

@root在控制器中定义,如:

@root = Todo.find_by_parent_id(nil)

同样,代码大部分是批发复制的,对上面的 gist 链接的修改很少。

4

2 回答 2

1

一些东西:

  • 您是否检查过您是否正确安装了插件?./script/plugin install git://github.com/rails/acts_as_nested_set.git
  • 你的餐桌布置妥当了吗?默认情况下,您的模型至少需要具有以下 3 列(除非您想覆盖它们):parent_id, lft, rgt. 如果没有这些acts_as_nested_set,将很难弄清楚发生了什么。我建议你阅读这个文件顶部的文档,因为自述文件没有说蹲,也没有关于这个问题的要点。
  • 如果您已经完成了上述操作,您是否创建了一个根元素(没有设置parent_id任何内容)然后添加了至少一个子元素?

    m = Model.new
    m.title = "My model's title"
    m.save!
    m2 = Model.new
    m2.title = "My child"
    m2.save!
    m.add_child(m2)
    

我只是用上面的方法做了一个快速测试,然后我就可以做类似m.root?m.direct_children. 祝你好运。

于 2009-09-07T21:08:39.023 回答
0

我从您的标题中得出的结论是,您使用的不仅仅是acts_as_nested_set。尝试删除一些插件,然后重试。

于 2009-09-07T18:12:07.803 回答