7

Genel uygulama denetleyicisi ilk yüklendiğinde, ad alanı içinde sayfa yüklerken ad uygulama denetleyicisi yüklenmez. Uygulama denetleyicisi şuna benzer:Raylar 3.2.3 adlandırılmış denetleyiciler aynı ada sahip global denetleyiciler tarafından geçersiz kılınmış

class ApplicationController < ActionController::Base 
protect_from_forgery 
end 

Ve isim alanlı uygulama kontrolörü şöyle görünür: "authenticate_admin"

class Admin::ApplicationController < ApplicationController 

def authenticate_admin! 
if current_admin.nil? 
    redirect_to new_admin_session_url 
end 
end 

private 

def current_admin 
    @current_admin ||= Admin.find(session[:admin_id]) if session[:admin_id] 
end 

helper_method :current_admin 
end 

biz before_filter kullanmak

Böyle:

class Admin::AssetsController < Admin::ApplicationController 
    before_filter :authenticate_admin! 
end 

Bir "Yönetim bölümünde NoMethodError :: yeni AssetsController #" atılır. Bu sadece, belirtilen rotadan önce küresel rotayı vurduğumuzda gerçekleşir. Sunucu yeniden başlatılmışsa ve adlandırılmış yol yüklendiyse, her şey düzgün şekilde çalışır.

+0

Bu denetleyiciler hangi dosyalarda? –

+0

app/controllerlers/admin/application_controller.rb, app/kontrolörleri/admin/assets_controller.rb ve app/kontrolörleri/application_controller.rb –

cevap

9

yeni eylem tanımlayın.

This Google grup iş parçacığı tam olarak neler olduğunu açıklayan iyi bir açıklama sağlar.

Düzeltmek için, modeli AdminUser olarak yeniden adlandırırdım veya bu bir olasılık değilse, ad alanını yeniden adlandırmak da sorunu giderir.

3

Adlandırılmış denetleyicilerin doğru dizin yapısı içinde görünmesi gerekir.

app/controllers/admin/assets_controller.rb

app/controllers/admin/application_controller.rb

Şahsen ben bir isim alanlı Ana kontrolör için ApplicationController isim aşırı yüklenmeye karşı tavsiye ediyorum. Bu soruna neden olmayacaktı ama bu bir tercih meselesi - sadece bir uygulama var ve sadece bir tane ApplicationController olmalıdır. Bu, Admin ad alanının amacı ContentManagementController'u kullanabilir.

İkincisi, bu şekilde denetleyicileri module anahtar kelime kullanmak ve tanımlamak daha iyi uygulamadır:

module Admin 
    class ContentManagementController < ApplicationController 
     # .. 
    end 
end 

# app/controllers/admin/content_management_controller.rb 

düzenleme: Ben de sadece (? Belki soru güncellendi) belirli hata gördüm - yapmanız gerekenler ayrıca ad aynı adı taşıyan bir Admin modeli (Sınıf) için ne çünkü bu oluyor AssetsController

def new 
    # 
end 
+0

Üzgünüz, daha önce bahsetmedim; Denetleyiciler, tam olarak belirttiğiniz şekilde adlandırılan doğru dizin yapısındadır. AssetsController'da eylemlerimiz var, onları orijinal görünmedik gibi görmedik. –