Rails:限制嵌套资源路径

时间:2015-04-04 23:55:30

标签: ruby-on-rails ruby ruby-on-rails-4 rails-routing nested-resources

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

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 idcategory_id无关,则会出错。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

由于我没有看到控制器方法,我认为搜索仅使用一个参数(而不是必需的两个)运行,params[:id]id subcategory })。因此,您始终会使用提供的subcategory获取id,但不会获得某些内容(也提供category id。你可以做这样的事情来解决你正在努力解决的问题:

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