2011-10-18 27 views
2

やあ人々にRailsの3 - 祖先宝石方法は

を働いていないアレンジ私はこのチュートリアルに従うました:私が作るしようとしたときhttp://railscasts.com/episodes/262-trees-with-ancestry

を "(:オーダー=>: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: 

私を助けてくれますか?

ありがとうございます!

答えて

4

私は祖先の宝石を使用しています。それは私のためにうまくいきます。例えば:

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

あなたのカテゴリークラス自体にそれを実行する必要がある - それは、Railsのコンソールでそれを試してみてください、クラスメソッド

です!

+0

、railscastは間違っていますか? ?...私はまったく同じ手順を実行したので、私は自分のコードで何かを変更する必要がありますか?そして、モデルやコントローラで、私があなたに与えたコードをどこに書くべきですか?既に解決済みの – Angelo

+0

、ありがとう – Angelo

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"宝石の偉大な代替品のようです。

1

Iはthis postに記載したよう...

アレンジ()メソッドは、クラスレベルまたは名前付き範囲ではなく、値の返された配列のいずれかに作用します。たとえば、あなたが(アレンジコールする場合)「アクティビティ」と呼ばれるテーブルの上に、これが配置された形式でテーブル全体を働いて返します:

Activity.arrange 

しかし、あなたが特定の上で手配コールする場合あなたが行くテーブルのツリー:

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

'subtree'は、has_ancestry gemによって提供される名前付きスコープです。したがって、アレンジ()メソッドは、次の名前付き範囲のために働く必要があります。

  • 祖先
  • 子供
  • のでsibblings
  • 子孫
  • サブツリー
関連する問題