2

2つのオブジェクト間に多対多の関連付けを設定しようとしています。私はいくつかのチュートリアルを経て、モデルを正しくセットアップすることができました。私の問題は、完全な関係を表示できるように正しいルートを設定するのに問題があることです...特定のカテゴリ(/ category / 1 / products /) の製品のみを表示するようなものです

これが私がモデルを生成した方法です:

script/generate scaffold category name:string
script/generate scaffold product name:string
script/generate scaffold categorization category_id:integer product_id:integer

スキーマは次のとおりです。

ActiveRecord::Schema.define(:version => 20100205210519) do

  create_table "categories", :force => true do |t|
    t.string   "name"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "categorizations", :force => true do |t|
    t.integer  "category_id"
    t.integer  "product_id"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "products", :force => true do |t|
    t.string   "name"
    t.datetime "created_at"
    t.datetime "updated_at"
  end
end

これが3つのモデルオブジェクトです。

class Category < ActiveRecord::Base
    has_many :categorizations
    has_many :products, :through => :categorizations
end

class Product < ActiveRecord::Base
    has_many :categorizations
    has_many :categories, :through => :categorizations
end

class Categorization < ActiveRecord::Base
    belongs_to :product
    belongs_to :category
end

コンソールからカテゴリに製品を追加できるため、非常にシンプルで、すべてが正常に機能しているようです。

@category.categorizations << Categorization.new(:product_id => 1)

私はroutes.rbファイルを更新する必要があると確信していますが、それを行う正しい方法が本当にわかりません。これは私がroutesファイルに入れたものです:

map.resources :categories, :has_many => :products

カテゴリ「/categories/ 7 / products /」で商品を表示しようとすると、すべての商品が一覧表示されます。これは、ルートが正しく設定されており、(インデックスを作成する代わりに)製品コントローラーでカスタムアクションを作成する必要があることを意味しますか?私はここで何を間違っているのですか...私は閉じていますか、それとも離れていますか?!?

ありがとう

4

3 に答える 3

3

ルートのデータを使用して商品リストをフィルタリングしていない可能性があります。

product_controllerのindexメソッドでは、次のようなことを行う必要があります。

Category.find(params[:category_id]).products
于 2010-02-05T22:27:41.537 に答える
2

ネストされたリソースを使用します。一般的な形式は次のようになります。

map.resources :users do |users|
  users.resources :posts
end

詳しくはこちらをご覧ください。

于 2010-02-05T22:23:22.843 に答える
0

この質問で提案されているように、リクエストパラメータ:category_idを検索クエリに追加してみることができます。

常にレーキルートの出力を確認してください。

于 2010-02-05T22:45:04.560 に答える