2012-02-13 7 views
0

カテゴリとサブカテゴリのモデルがあります。カテゴリには複数のサブカテゴリがあり、サブカテゴリはカテゴリに属します。各サブカテゴリには現在、そのカテゴリに属する​​行の位置を追跡するための位置フィールドがあります。カテゴリ/サブカテゴリの関係を処理する最良の方法Ruby on Rails

私がそれをやっているところの問題は、各カテゴリに固有の:positionフィールドが必要なことです。そのため、私のサブカテゴリモデルでvalidates_uniqueness_of :positionを使用する代わりに、位置フィールドがその特定のカテゴリに固有であることを確認する方法が必要です。誰もが何らかのアイデアを持っているか、以前にこの問題を扱っていた可能性がありますか?

答えて

1

は、lucapettesの答えに拡大

ネストされたセットは、(https://github.com/skyeagle/nested_set)このようなものですあなたはどのカテゴリーにもあなたの製品を関連付けるでしょう。

は、awsome_nested_setのためのwikiには、いくつかのより良いドキュメントを持っているかもしれませんhttps://github.com/skyeagle/nested_set/blob/master/lib/nested_set/base.rb

方法のために、このファイルで見てくださいたとえば、https://github.com/collectiveidea/awesome_nested_set/wiki/Awesome-nested-set-cheat-sheet

あなたはこのようなリストに残った項目、(例えばアップを移動することができます)は、このモデルを理解するために

をcategory.move_leftし、それが動作する理由、私はまた、サブカテゴリに属している製品を持っているつもりです Trees in SQL by Joe Celko

+0

ありがとう、私は学校の木々をちょっと見渡すことを覚えています。もっと注意を払うべきだった。あなたは単純なbelongs_toとhas_manyの関係の代わりにNestedListを使うことを決めたときにアドバイスできますか? – ruevaughn

+0

ディープツリーの主な利点は、 – macarthy

+0

私はそれを実装しようとしています。私は 'acts_as_nested_set'を自分のCategoryモデル、Subcategoryモデル、Productモデルに入れますか?それにlft、rgt、parent_idを追加する必要がありますか? – ruevaughn

1

カテゴリ/サブカテゴリの処理にはNestedSet、位置処理にはActsAsListを使用してください。

+0

読みますNestedSetもその関係で動作しますか? – ruevaughn

+0

実際にネストされたセット内のリーフは既に順序付けされているため、ネストされたセットを使用できます。はい、このモデルでは、サブカテゴリに製品を含めることができます。 – macarthy

+0

ネストされたセットの詳細と説明付きの回答を追加しました – macarthy

1

私は(すなわち、名前は、ユーザーごとの一意である)、これは、ユーザーIDに基づいて、名前の一意性を検証信じる:

class Report < ActiveRecord::Base 
    validates_uniqueness_of :name, :scope => [:user_id] 
end 

has_manybelongs_toような単純な会合はあなたのために働くことがあります。 positionが整数の場合は、コントローラのorder_by :positionをその位置の一意性の有無にかかわらず行うことができます。あなたがいずれかの場所に設定して、ノードを追加することができます

- category 
+- category 
+- category 
+--- category 
+- category 
- category 
+- category 
+- category 
+--- category 
+- category 

関連する問題