我正在尝试在两个对象之间建立多对多关联。我已经完成了几个教程,并且能够正确设置模型。我的问题是我无法设置正确的路线,所以我可以查看完整的关系...只显示特定类别的产品( / categories / 1 / products / )< / p>
这是我生成模型的方式:
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文件,但我真的不知道正确的方法。这是我放在路线文件中的内容:
map.resources :categories, :has_many => :products
当我尝试查看“/ categories / 7 / products /”类别的产品时,它只列出了所有产品!这是否意味着我的路由设置正确,我只需要在产品控制器上编写自定义操作(而不是编写索引)?我在这里做错了什么...我是关闭还是离开?!?
由于
答案 0 :(得分:3)
您可能没有使用路线中的数据来过滤产品列表。
在product_controller的index方法中,您需要执行以下操作:
Category.find(params[:category_id]).products
答案 1 :(得分:2)
答案 2 :(得分:0)
根据this question的建议,您可以尝试将请求参数:category_id添加到查找查询中。
始终查看佣金路线的输出。