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] работает отлично. Однако, если я отредактирую URL напрямую до /category/1/subcategory/[11..20], подкатегории все еще отображаются, хотя они находятся под category id: 2.

В моем коде должно быть что-то отсутствует. Что-то говорит мне, что это не так, как должно работать. Он должен выдать ошибку, если вы вводите код subcategoryid, который не связан с его category_id.

Как бы исправить это?

ответ

0

Как я не вижу метода контроллера я полагаю, что поиск работает только с одним параметром (вместо необходимых двух), params[:id] (который является id из subcategory). В результате вы всегда получаете subcategory с предоставленным id, но не в некоторых (также предоставлен) categoryid. Вы можете сделать что-то подобное, чтобы решить проблему, с которой вы боретесь:

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

У меня будет попытка. Но даже тогда я не уверен, что это исправляет проблему редактирования URL напрямую, не так ли? – leejay100

+0

@ leejay100: На самом деле это так. Вы можете представить это как цепочку проверок: скажем, uri - '/ category/1/subcategory/15'. Итак, сначала метод находит все категории с 'id = 1' (как вы можете видеть, у вас есть только один). Затем он находит все «подкатегории» ('[1..10]'), затем пытается найти подкатегорию с идентификатором 'id = 15' в этой коллекции, но ее нет, поэтому нет ничего, чтобы отобразить , – potashin

+1

А, я вижу. Я бы просто поместил это в методе показа. Спасибо @notulysses – leejay100