我已经阅读了一些文章,我知道,继承超过2级的深度资源是不好的,但现在让我们忘记它了。
让我们想象一下,我有这样的模特: car_brand
car_model
car_type
在路线上我可以这样写:
namespace :admin do
resources :car_brands do
resources :car_models do
resources :car_types
end
end
end
但我没有找到任何好文章,如何使用这样的架构生成我的控制器和视图
我需要在控制器类头中编写什么,比如:class
Admin :: CarBrands :: CarModelsController< ApplicationController中
还是什么?我需要清楚了解这一刻,每个子模型视图必须在子文件夹视图中,或者如何?请不要downvote,不要关闭它,我真的很困惑,我不知道怎么去(
答案 0 :(得分:2)
Admin::CarTypesController < ApplicationController
个controllers/admin
文件夹中的 car_types_controller.rb
运行rake routes
并查看此行,例如:
/admin/car_brands/:car_brand_id/car_models/:car_model_id/car_types(.:format)
这是将映射Admin::CarTypesController#index
metod的uri模式。在params
哈希中,您会找到:car_brand_id
和:car_model_id
。
答案 1 :(得分:1)
what i need to write in controller class header, something like: class Admin::CarBrands::CarModelsController < ApplicationController
部分是,部分不是。是的,因为您已经命名空间路由,即在namespace :admin
和否,因为嵌套资源并不意味着命名空间控制器为CarBrands::CarModelsController
。
由于所有resources
都在命名空间admin
内,因此您将按如下方式生成所有控制器:
rails g controller admin/car_brands
rails g controller admin/car_models
rails g controller admin/car_types
执行上面的每个命令会将控制器类和视图目录以及其他测试特定文件放在相应的目录中。您的问题更多地是针对控制器和视图,因此关注的目录是:
- app/controllers/admin/
- app/views/admin/car_brands/
- app/views/admin/car_models/
- app/views/admin/car_types/
CarBrandsController
的控制器声明如下:
class Admin::CarBrandsController < ApplicationController
...
end
通过这些设置,现在由您决定如何将每个控制器作为资源进行管理。如果您将car_types
嵌套在car_models
之内,那么car_models
控制器中的方法也会在参数中预期car_type_id
。如果您没有嵌套car_types
资源,那么资源就是它自己的独立资源,并且不依赖于任何其他资源。