2017-02-21 9 views
1

公開エリアと管理ダッシュボードを持つアプリを作成しようとしています。admin/routeの使い方は?

パブリックエリアでは、Publicという名前のコントローラのみを使用し、多くのビューを使用します。各ビューは私のフロントエンドのエリアであり、そのフォルダとその下のフォルダはviews/publicです。彼らは連絡先、私たちについてのようなページです。しかし最後に、私はを公開していません私のURLには言葉があります。私はちょうどのようなものを欲しい:http://localhost:3000/contactし、適切な場所に移動します。同じことが、このコンタクトビュー内のフォームにも反映されます。

私は管理者に別の問題があります。まず、管理者コントローラを作成しました。表示はです。インデックス、ログインログアウトです。その後、私はのイベントコントローラを表示しました:のインデックスを新規作成、編集、表示、削除、破棄して更新します。

だから、私はイムは、この権利を考えた場合知らないが、この主題について検索した後、私は、イベントコントローラのため、このような範囲のルートをした:

scope module: 'admin', path: 'admin' do 
    resources :events do  
     member do 
      get :delete 
      end 
     end 
    end 

私は下のイベントビューを入れていましたフォルダビュー/管理者を入力し、コントローラークラス名を変更してください。Admin ::という名前を付けてください。また、コントローラ管理者およびイベントは、コントローラ/ adminの下にあります。

イベントコントローラとそのビューは正しく動作しているようです。 CRUDのURLでもしかし、私はどのように管理スコープの下に管理者のコントローラのルートを置くか分からない。 http://localhost:3000/admin/ 、それが私を取る必要があります: 私の意図は、この作品のようなURLを作成することです私も管理者のスコープの下管理ルートを置くしようとした管理者/管理者#インデックス

、それdidnt仕事。それはこのようなものだった:私はこれも試してみました

scope module: 'admin', path: 'admin' do 
    get 'admin/index' 
    get 'admin/login' 
    get 'admin/logout' 
    resources :events do  
     member do 
      get :delete 
      end 
     end 
    end 

scope module: 'admin', path: 'admin' do 
    get 'index' 
    get 'login' 
    get 'logout' 
    resources :events do  
     member do 
      get :delete 
      end 
     end 
    end 

didntの仕事をどちらか。私はこのルートのことについて考えていますか?そうでなければ、私は何が欠けていますか?

+0

名前空間以外の 'admin/admin'では、' controllers/admin_controller.rb'に行く 'admin /'だけですが、 'controller:admin do; get 'admin /'、action::index; エンド ' – Chloe

答えて

1

indexloginlogoutを処理するコントローラを指定する必要があります。

あなたは管理者のような名前空間AdminControllerをしたい場合は:: AdminControllerを、あなたはそれがこれらのルート

  Prefix Verb URI Pattern      Controller#Action 
      admin GET /admin(.:format)     admin/admin#index 
    admin_login GET /admin/login(.:format)   admin/admin#login 
    admin_logout GET /admin/logout(.:format)   admin/admin#logout 
    admin_events GET /admin/events(.:format)   admin/events#index 
       POST /admin/events(.:format)   admin/events#create 
new_admin_event GET /admin/events/new(.:format)  admin/events#new 
edit_admin_event GET /admin/events/:id/edit(.:format) admin/events#edit 
    admin_event GET /admin/events/:id(.:format)  admin/events#show 
       PATCH /admin/events/:id(.:format)  admin/events#update 
       PUT /admin/events/:id(.:format)  admin/events#update 
       DELETE /admin/events/:id(.:format)  admin/events#destroy 
+0

それは働いた。しかし、管理領域では、**管理者**コントローラのすべてのビューを** views/admin/admin **フォルダに移動しなければなりませんでした。レイアウトファイルが含まれています。 さて、私の**イベント**コントローラでは、このようなレイアウトを呼び出す必要があります:**レイアウト "admin/admin" **。それはそれのように保つのは大丈夫ですか? – churros

+0

名前空間であっても、レイアウトファイルを変更するときにレイアウトファイルを検索するデフォルトの場所は 'views/layout'です...その場所のレイアウトは' admin'( 'views/layout/admin.html.erb') レイアウトファイルを別の場所に置いた場合、正しい場所を設定することだけです...あなたの場所に、私は 'admin.html.erb'、place 'views/layout'とそれをレンダリングするコントローラーに' layout:admin'を追加します – cefigueiredo

+0

ok @cefigueiredo、私はビュー/レイアウトとその動作に戻しましたが、私のコントローラー** Admin **に戻しませんでした。私はそれを動作させるために**レイアウト "admin" **を置く必要がありました。 しかし、なぜですか?コントローラーは自分の名前を持つレイアウトを自動的に検索しませんか? – churros

0

があなたの公開ルート

get "/contact",  to: "public#contact",  as: :contact 

を指定して生成します

namespace :admin do 
    controller :admin do 
    get '/', action: :index 
    get :login 
    get :logout 
    end 
    resources :events 
end 

ことを行うことができます管理ルートを分ける:

namespace :admin do 
    get :login, to: "admin#login" 
    post :logout, to: "admin#logout" 
    root "admin#root" 
end