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