1

我想保留我的嵌套资源在其父项的上下文中。这里是我的代码如下:Rails:限制嵌套的资源路径

的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 

^h ERE的我的资料:
Categoryid:[1,2]
Subcategoryid:[1..10],category_id:1
Subcategoryid:[11..20],category_id:2

对于我的路径,/category/1/subcategory/[1..10]工作得很好。但是,如果我直接编辑网址到/category/1/subcategory/[11..20],即使它们在category id: 2下,子类别仍显示。

我必须在我的代码中丢失一些东西。有些事告诉我,这不是它应该如何工作。如果您输入的subcategoryid与它的category_id没有关联,它应该会报错。

我该如何解决这个问题?

回答

0

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

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

我会试试看。但即使如此,我不确定这是否解决了直接编辑url的问题,是吗? – leejay100 2015-04-05 00:31:40

+0

@ leejay100:事实上,它确实如此。你可以把它想象成一个检查链:比方说,uri是'/ category/1/subcategory/15'。所以,起初,这个方法找到所有的类别都是'id = 1'(正如你所看到的,你只有一个)。然后找到它的所有子类别('[1..10]'),然后尝试在该集合中找到具有'id = 15'的子类别,但没有它,因此没有任何显示。 – potashin 2015-04-05 00:37:27

+1

啊,我明白了。我只是把这个放在show方法中。谢谢@notulysses – leejay100 2015-04-05 00:45:58