Rails: 限制嵌套资源路径

Rails: Restrict Nested Resource Path

我想将我的嵌套资源保留在其父资源的上下文中。下面是我的代码:

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] 工作得很好。但是,如果我将 url 直接编辑为 /category/1/subcategory/[11..20],子类别仍然显示,即使它们在 category id: 2.

我的代码中肯定遗漏了一些东西。有些东西告诉我这不是它应该如何工作的。如果您输入与其 category_id.

无关的 subcategory id,它应该会抛出错误

我该如何解决这个问题?

因为我没有看到控制器方法,所以我假设搜索 运行 只有一个参数(而不是必要的两个),params[:id](这是 id subcategory)。结果,你总是得到 subcategory 与提供的 id,但不是在一些( 也提供 category id .你可以做这样的事情来解决你正在努力解决的问题:

@data = Category.find(params[:category_id])
                .subcategories
                .find(params[:id])