リソースの一部のアクションが1つのコントローラーに移動し、一部が別のコントローラーに移動するようにRailsルートを適切に定義するにはどうすればよいですか?

THpubs

私のアプリは持っているproductscategoriessubcategries/dashこれらの詳細を編集するための管理インターフェースがURLにあります。私はこのようにURLを設定しようとしました:

  • 製品は、URLの下で作成、更新、破棄、およびインデックスを作成します /dash/products
  • 製品は下に表示されます /products/porduct-code
  • カテゴリは下に表示されます /category-name
  • /dash/editcategoriesアクションを指す下のカテゴリ編集リストeditcategories
  • サブカテゴリは下に表示されます category-name/subcategory-name
  • 編集も上記のようなカテゴリにあります
  • カテゴリとサブカテゴリの作成、更新、削除、インデックス作成はすべて /dash

1つの問題を修正しようとすると、もう1つの問題が発生します。ルートファイル全体が混乱しました。それらを修正しようとしましたが、うまくいきません。これが私のルートファイルです:

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

競合の問題を修正し、ルートファイルをクリーンアップするのを手伝ってください。また、Railsのルートを理解するための良いガイドを教えてください。

最大

すべてについてのREST:

ルートファイルの雑然としたものの多くは、railsのREST規則を守るだけでクリーンアップできます。これにより、アプリケーションの一貫性も向上します。多くの場合、短縮URLを取得するためだけにアプリケーションの設計に妥協していると思います。

多くのルートを置く'/'などの「名前空間」'/about''/faq'などは、小規模サイトのためか、あなたは主に(藤堂アプリのような)リソースのシングルタイプを扱うアプリケーションを構築している場合は、[OK]を動作します。しかし、多くの種類のリソースがあり、複雑さがかなりある場合、設計は非常に弱くなります。

各リソースを独自の小さなボックス(/users/pets)に入れると、RESTfulなインターフェイスが作成され、複雑さが軽減され、ルーティングのあいまいさや競合のリスクが軽減されます。

また、リソースに名前を付けるときは、読みやすくするためにsnake_case使用する必要があります。

resources :districtrates # bad
resources :district_rates # better

リファクタリングで落ち着いて汚れましょう:

get 'contact', to: 'pages#contact'
post 'contact', to: 'pages#contactscreate'

PagesController内にいくつかの「静的」ルートをマウントし、「手動で」ルートを作成することは問題ありません。しかし、コントラクトは実際にはもっと落ち着いてモデル化できるものなので、これは本当ににおいがします。

を作成しContactsController、ルート定義を次のように変更します

resources :contacts, only: [:new, :create]
# GET /contacts/new
# POST /contacts

絶対に/contactパスが必要な場合

get 'contact', to: 'contacts#new'
# But don't create that POST route! 

同じ治療の他の候補はdealslistdeliverychargesです。

管理インターフェース:

「ページ上編集」(標準のコントローラー、ルート、ビューを使用)を完全に採用するか、独自のコントローラーとビューを持つadmin名前空間を用意する必要があると私は主張します。

したがって、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

これはにルーティングされDash::ImagesControllerます。分野横断的な複製の方法として懸念事項(ミックスイン)を使用します。

カテゴリとサブカテゴリは、代わりにネストを使用してルーティングできます。

namespace :dash
  resources :categories do
    resources :categories, as: 'sub_categories', controller: 'dash/categories'
  end
end

添加:

パブリックカテゴリ:

resources :categories, only: [:show] do
  resources :categories, 
            as: 'sub_categories', 
            controller: 'categories',
            only: [:show]
end

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ