帮助n00b了解rails,特别是继承,acts_as_nested_set,awesome_nested_set,sortable_element_for_nested_set

时间:2009-09-07 12:47:31

标签: ruby-on-rails plugins acts-as-nested-set

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

<% for child in root.direct_children do %>

我认为direct_children的{​​{1}}是NoMethodError,这是acts_as_nested_set的实例方法。在控制台上,如果我尝试创建模型的新实例,它同样无法访问acts_as_nested_set实例方法,因此我认为问题不在于局部但在模型中。

再次,抱歉,如果我的术语有误,我是铁杆新手。无论如何,我做错了什么?我的模型中有“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链接进行的很少修改来批量复制。

2 个答案:

答案 0 :(得分:1)

一些事情:

  • 您是否检查过您是否正确安装了该插件? ./script/plugin install git://github.com/rails/acts_as_nested_set.git
  • 你有没有正确摆好桌子?默认情况下,您的模型必须至少包含以下3列(除非您要覆盖它们):parent_idlftrgt。没有这些acts_as_nested_set将很难弄清楚发生了什么。我建议你阅读this file顶部的文档,因为自述文件没有说深蹲,也不是那个问题。
  • 如果您已完成上述操作,是否创建了根元素(未将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之类的操作。祝你好运。

答案 1 :(得分:0)

我从你的标题中得到的是你使用的行为比acts_as_nested_set多得多。尝试删除一些插件,然后重试。