THp*_*ubs 0 ruby-on-rails rails-routing ruby-on-rails-4
我的应用程序有products,categories和subcategries.我在网址/dash上有一个管理界面来编辑这些详细信息.我试着像这样设置网址:
/dash/products/products/porduct-code/category-name/dash/editcategories指向动作的类别编辑列表editcategoriescategory-name/subcategory-name/dash当我试图解决一件事时,另一件事打破了.我的整个路线文件变得一团糟.试图解决它们,事情不会奏效.这是我的路线文件:
Rails.application.routes.draw do
# Pages
root 'pages#home'
get 'terms' => 'pages#termsandconditions'
get 'delivery-charges' => 'pages#deliverycharges'
get 'search' => 'pages#search'
get 'deals' => 'pages#alldeals'
get 'contact', to: 'pages#contact'
post 'contact', to: 'pages#contactscreate'
get 'dealslist' => 'pages#dealslist'
get 'cart' => 'carts#cart'
get 'rate' => 'districtrates#rate'
get 'deliverycharges' => 'districtrates#deliverycharges'
get 'pricecalc' => 'pages#pricecalc'
# Devise routes
# Others
resources :users
resources :brands
resources :orders
get 'dash/subcategorylist' => 'products#subcategorylist'
get 'dash' => 'dash#index'
get '/products/:id', to: 'pages#product'
scope '/dash' do
resources :districtrates, as: 'deliveryrates'
resources :slides
resources :images
resources :colorqtys
resources :products
get 'imagelist' => 'images#imagelist'
get 'slidelist' => 'slides#slidelist'
get 'update_deliveryrates' => 'districtrates#update_deliveryrates'
get 'adminlogs' => 'logs#adminlogs'
end
get '/:id', to: 'categories#show'
scope '/dash' do
get 'editcategories' => 'categories#edit_categories'
end
scope '/:id' do
get '/:id', to: 'subcategories#show'
end
resources :categories, path: '/dash/category' do
get 'editsubcategories' => 'subcategories#edit_subcategories'
end
get 'dash/category/new' => 'categories#new'
post 'dash/categories' => 'categories#create'
delete 'dash/category/:id' => 'categories#destroy'
patch 'dash/category/:id' => 'categories#update'
get 'dash/subcategory/new' => 'subcategories#new'
post 'dash/subcategories' => 'subcategories#create'
delete 'dash/subcategory/:id' => 'subcategories#destroy'
patch 'dash/subcategory/:id' => 'subcategories#update'
get 'dash/colors' => 'colors#index'
post 'dash/saveimages' => 'images#saveimages'
post 'dash/savecolorqtys' => 'colorqtys#savecolorqtys'
end
Run Code Online (Sandbox Code Playgroud)
请帮我修复冲突问题并清理我的路线文件.另外,请给我一个很好的指南,了解Rails路线.
您可以通过坚持使用rails REST惯例来清理路径文件中的大部分内容.这还应该提高应用程序的一致性.我相信在很多情况下,您只是为了获取简短的网址而损害您的应用程序的设计.
使许多航线在'/'"命名",如'/about','/faq'等的小型网站工作正常,或者如果你正在建立一个应用程序,它主要使用单一类型的资源(如应用程序的Todo)交易.但是当你拥有许多类型的资源和公平的复杂性时,它会导致设计非常薄弱.
将每个资源放入自己的小框(/users,/pets)中可以创建漂亮的RESTful接口,并降低复杂性以及路由模糊和冲突的风险.
在命名资源时,您还应该使用snake_case来提高可读性:
resources :districtrates # bad
resources :district_rates # better
Run Code Online (Sandbox Code Playgroud)
让我们重构并弄脏重构:
get 'contact', to: 'pages#contact'
post 'contact', to: 'pages#contactscreate'
Run Code Online (Sandbox Code Playgroud)
在PagesController中挂载一些"静态"路由并"手动"创建路径就可以了.但这真的很有气味,因为合同实际上是可以更加安静地建模的东西.
创建一个ContactsController并将路径定义更改为:
resources :contacts, only: [:new, :create]
# GET /contacts/new
# POST /contacts
Run Code Online (Sandbox Code Playgroud)
如果你绝对必须有一条/contact路径:
get 'contact', to: 'contacts#new'
# But don't create that POST route!
Run Code Online (Sandbox Code Playgroud)
其他相同治疗的候选人是dealslist,deliverycharges.
我认为你应该完全接受"在页面编辑上"(使用标准控制器,路由和视图)或者拥有一个带有自己的控制器和视图的管理命名空间.
因此,您将更改路由定义以使用Dash命名空间.
namespace :dash
resources :slides
resources :images
resources :products
# ...
get 'imagelist' => 'images#imagelist' # BAD. Use images#index instead
get 'slidelist' => 'slides#slidelist' # BAD. Use slides#index instead
end
Run Code Online (Sandbox Code Playgroud)
这将路由到Dash::ImagesController.使用关注点(mixins)作为交叉重复的方法.
可以使用嵌套来路由类别和子类别.
namespace :dash
resources :categories do
resources :categories, as: 'sub_categories', controller: 'dash/categories'
end
end
Run Code Online (Sandbox Code Playgroud)
公共类别:
resources :categories, only: [:show] do
resources :categories,
as: 'sub_categories',
controller: 'categories',
only: [:show]
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1305 次 |
| 最近记录: |