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