Rails 3 - 祖先宝石方法安排不起作用

时间:2011-10-18 20:39:41

标签: ruby-on-rails-3 rubygems


嗨人

我已按照本教程:http://railscasts.com/episodes/262-trees-with-ancestry

当我尝试制作“arrange(:order =>:id)”时,我收到了此消息

    undefined method `arrange' for #<Array:0x8c19780>

Extracted source (around line #4):

1: 
2: <h1>Listing categories</h1>
3: 
4: <%= nested_categories @categories.arrange(:order => :id) %>
5: 
6: <br />
7:

请帮帮我吗?

谢谢!

3 个答案:

答案 0 :(得分:4)

我正在使用祖先宝石,它对我来说很好。 e.g:

 require 'awesome_print'                  # just for nice demo output
 ap  Account.arrange(:order => :id) ; 1   

您需要在Categories类本身上运行它 - 它是一个类方法

在Rails控制台中尝试一下!

答案 1 :(得分:3)

我会澄清@ Tilo的回答:

在您的控制器中,执行:

def index
  @categories = Category.arrange(:order => :created_at)

  respond_to do |format|
    format.html # index.html.erb
    format.json { render json: @categories }
  end
end

在您的视图中,执行:

<%= nested_categories @categories %>

我正在使用Rails 3,而“Ancestry”宝石似乎是“Acts As Tree”宝石的绝佳替代品。

答案 2 :(得分:1)

正如我在this post中描述的那样......

arrange()方法在类级别或命名范围内起作用,而不是在返回的值数组上起作用。例如,如果要在名为&#39; Activity&#39;的表上调用arrange(),这将起作用并以排列的格式返回整个表:

Activity.arrange

但是,如果你想在表格中的特定树上打电话安排,你会去:

Activity.find(...).subtree.arrange

&#39;子树&#39;是has_ancestry gem提供的命名范围。因此,arrange()方法应该适用于以下命名范围:

  • 的祖先
  • 儿童
  • sibblings
  • 后代
  • 子树