我想将嵌套资源保留在其父级的上下文中。这是我的代码:
routes.rb :
resources :categories do
resources :subcategories
end
迁移:
create_table "categories" do |t|
t.string "name"
end
create_table "subcategories" do |t|
t.string "name"
t.integer "category_id"
end
模型:
class Categories < ActiveRecord::Base
has_many :subcategories
end
class Subcategories < ActiveRecord::Base
belongs_to :category
end
这是我的数据:
Category
id
:[1,2]
Subcategory
id
:[1..10],category_id
:1
Subcategory
id
:[11..20],category_id
:2
对于我的路径, /category/1/subcategory/[1..10]
完美无缺。但是,如果我将网址直接编辑为 /category/1/subcategory/[11..20]
,则子类别仍会显示,即使它们位于category id: 2
下。
我必须在代码中遗漏一些东西。有些东西告诉我,它不应该如何工作。如果您输入的subcategory
id
与category_id
无关,则会出错。
我该如何解决这个问题?
答案 0 :(得分:0)
由于我没有看到控制器方法,我认为搜索仅使用一个参数(而不是必需的两个)运行,params[:id]
(id
subcategory
})。因此,您始终会使用提供的subcategory
获取id
,但不会获得某些内容(也提供)category
id
。你可以做这样的事情来解决你正在努力解决的问题:
@data = Category.find(params[:category_id])
.subcategories
.find(params[:id])