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])
我想将我的嵌套资源保留在其父资源的上下文中。下面是我的代码:
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])