Я хотел бы сохранить свои вложенные ресурсы в контексте своего родителя. Вот мой код ниже: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 в мои данные:
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
.
В моем коде должно быть что-то отсутствует. Что-то говорит мне, что это не так, как должно работать. Он должен выдать ошибку, если вы вводите код subcategory
id
, который не связан с его category_id
.
Как бы исправить это?
У меня будет попытка. Но даже тогда я не уверен, что это исправляет проблему редактирования URL напрямую, не так ли? – leejay100
@ leejay100: На самом деле это так. Вы можете представить это как цепочку проверок: скажем, uri - '/ category/1/subcategory/15'. Итак, сначала метод находит все категории с 'id = 1' (как вы можете видеть, у вас есть только один). Затем он находит все «подкатегории» ('[1..10]'), затем пытается найти подкатегорию с идентификатором 'id = 15' в этой коллекции, но ее нет, поэтому нет ничего, чтобы отобразить , – potashin
А, я вижу. Я бы просто поместил это в методе показа. Спасибо @notulysses – leejay100