我有一个网站,我正在制作如下所示的 URL(供用户查看信息):
/:state/:data_type/:category/:subcategory/:item_id
data_type 是“目录”、“文章”或“文档”之一。这个想法是存储每个状态的信息,基于类别和子类别,并且可以这样查看。
任何特定的部分都是有效的路径。例如:
/IN - 显示印第安纳州的主页(控制器 region_home,操作索引)
/IN/directory - 印第安纳州的类别和子类别列表(控制器 region_categories)
/IN/directory/schools - 印第安纳州“学校”类别下的子类别列表(控制器是 region_subcategories)
/IN/directory/schools/elementary - 印第安纳州小学列表(控制器为 region_directory,操作索引)
/IN/directory/schools/elementary/10-meridian-street - 深入到特定学校(控制器是 region_directory,动作是 show)
这主要是为了显示信息。我已经为所有区域、类别、子类别等创建了“slugs”。这部分有效。
我实际上可以让它像这样工作:
match ':region_slug/directory(/:category_slug(/:subcategory_slug(/:directory_entry_id)))' => 'region_directory#index', :as => :region_directory
问题是每个请求都转到同一个控制器/动作,然后必须分派请求。
我可以把它切成小块:
match ':region_slug' => 'region_home#index'
match ':region_slug/directory' => 'region_categories#index'
match ':region_slug/directory/:category_slug' => 'region_subcategories#index'
match ':region_slug/directory/:category_slug/:subcategory_slug' => 'region_directory#index'
match ':region_slug/directory/:category_slug/:subcategory_slug/:directory_entry_id' => 'region_directory#show'
但这打破了 DRY,我必须为文章等重复这一点。我不知道如何使用范围来做到这一点。有任何想法吗?