0

私は管理者用コントロールパネルを構築しています(しようとしています;))。

私はRuby on Rails でのバックエンド管理を見てきましたが、提案されているように、管理者をチェックしてレイアウトなどを設定する Admin::AdminController を作成しようとしています。

しかし、 /admin を /admin/dash にルーティングするルートも設定しようとしています

http://guides.rubyonrails.org/routing.html#controller-namespaces-and-routing、特にセクション 2.6を読んだ私の理解から、

管理者::管理者コントローラ

Admin は名前空間、AdminController は ApplicationController のサブクラス (拡張機能?、インターフェースの実装?) であるコントローラーであることをレールに伝えます。これは、コントローラーが app/controllers/admin/ に存在し、admin_controller.rb と呼ばれることを意味します。

しかし、私が欲しいのは

管理者コントローラ

次のようなエラーが表示されます。

uninitialized constant Admin::Controller

ルートの私のコード:

  match :admin, :to => 'admin/admin#dash'
  namespace :admin do
    # Directs to /admin/resources/*
    match '/dash', to: '#dash'
    resources :users, :pictures
  end

コントローラーを app/controllers/admin、app/controllers との組み合わせに配置しました

class Admin::AdminController < ApplicationController
  before_filter :admin_user
  # / ** STATIC ADMIN PAGES ** /
  def dash
  end
end

またはクラス AdminController < ApplicationController。

編集:ルーティングについての私の理解かもしれません。例:

namespace :admin do
  get "/dash"

対。

namespace :admin do
  match "/dash" to "admin#dash"

対。

namespace...
  match "/dash" to "#dash"

最初のものは、コントローラーを介してダッシュを表示できるようにします。つまり、管理者/ダッシュはによって制御されます

AdminController < ApplicationControler
  def dash
  end

2 つ目は admin/admin/dash を admin/dash にルーティングしますか?

TL/DR: 私の混乱は、構文や RESTful な慣行、あるいは Ruby でのクラス/オブジェクトの継承についての理解が不十分であることが原因だと思います。

この n00b を助けてくれてありがとう。:)

副次的な質問: 誰かがスポイラーのように開くまでコードを最小化するように変更して、さらに情報を見つけて追加した場合に混乱しないようにすることはできますか?

4

2 に答える 2

3

最初のアプローチは正しかったと思いますが、少し変更する必要があります。

1)名前空間内に /admin => /admin/dash を挿入します(私見、リダイレクトする方が良いです)

match 'admin' => redirect('admin/dash')

また

namespace :admin do
  match '/', to: 'admin#dash'
end

2)リソースブロック内にないため、'/dash' を '#dash' に一致させることはできません。名前空間ブロック内にいるため、暗黙のコントローラーはありません。

namespace :admin do
  match 'dash', to: 'admin#dash'
  # This will go to Admin::AdminController#dash
  # (first Admin because of the namespace,
  #  and the second because of the controller name)
end

それがうまくいくことを願っています:D

于 2012-07-05T02:34:41.577 に答える
0

必要なのは、ルーティングの「スコープ」です。

scope "/admin" do
  resources :articles
end

/admin/articles を ArticlesController にルーティングします (Admin:: プレフィックスなし)

ドキュメンテーションは、考えられるほぼすべてのケースをカバーしています。 http://edgeguides.rubyonrails.org/routing.html

于 2012-07-05T02:32:25.710 に答える