私は最近、私の現在のレールアプリの関係のために、宝石nested setを使うべきだとアドバイスされました。 (私の前のスレッド/質問here)私は現在3つのモデル、カテゴリー、およびhas_manyの製品BELONGS_TO
サブカテゴリを、サブカテゴリにhas_manyNested Set Gemはどのように機能し、どのようにプロジェクトに組み込むことができますか?
カテゴリーを持っています。
製品belongs_toサブカテゴリ。私はサブカテゴリ ----この
+カテゴリー
のようなもの----サブカテゴリ
--------製品
--------製品
それを表示したいです
--------製品
--------製品
+カテゴリー
----サブカテゴリ
--------製品
--- -----製品
これをnested_setで行う場合は、モデルでどのように設定するのですか?サブカテゴリと製品モデルを削除し、categories_as_nested_setをCategoryモデルに追加するだけですか?モデルを作成したら、作成したネストされたセットのノードを作成できるように、コントローラのアクションを更新するものは何ですか?
私は、このnested_setリストのCRUD、作成、読み取り、更新、および破棄をどのように行うことができるかを理解するのに役立つと思います。
class CategoriesController < ApplicationController
def new
@category = Category.new
@count = Category.count
end
def create
@category = Category.new(params[:category])
if @category.save
redirect_to products_path, :notice => "Category created! Woo Hoo!"
else
render "new"
end
end
def edit
@category = Category.find(params[:id])
end
def destroy
@category = Category.find(params[:id])
@category.destroy
flash[:notice] = "Category has been obliterated!"
redirect_to products_path
end
def update
@category = Category.find(params[:id])
if @category.update_attributes(params[:category])
flash[:notice] = "Changed it for ya!"
redirect_to products_path
else
flash[:alert] = "Category has not been updated."
render :action => "edit"
end
end
def show
@category = Category.find(params[:id])
end
def index
@categories = Category.all
end
end
カテゴリーモデル::
class Category < ActiveRecord::Base
acts_as_nested_set
has_many :subcategories
validates_uniqueness_of :position
scope :position, order("position asc")
end
サブカテゴリモデル:
class Subcategory < ActiveRecord::Base
belongs_to :category
has_many :products
scope :position, order("position asc")
end
そして最後に、ここで
は、私はすでに
カテゴリーのコントローラーを持っているいくつかのコードです製品モデル:
class Product < ActiveRecord::Base
belongs_to :subcategory
has_many :products
scope :position, order("position asc")
end
ご協力いただければ幸いです。
いいですね。私のモデルにacts_as_nested_setを適用すると、正確に何が起こっていますか?私の新しい/作成するアクションはまだ同じに見えますか?私はコントローラーでそれをどうやって行うのかがはっきりしていません。 – ruevaughn
コントローラのロジックを使って答えを更新しました。ここでの要点は、ルートを追加する必要があるということです。各コントローラのアクションでは、params [:id]が存在するかどうかによって異なる方法で処理します。 –
これを実装しようとしています。私のCategoriesコントローラで指定したコード 'undefined method parent_id_changed? for# 'のように、カテゴリを作成しようとしました。このエラーメッセージは何ですか? –
ruevaughn