2008-09-23 2 views
30

Ich habe eine Frage darüber, wie man etwas "The Rails Way" macht. Mit einer Anwendung, die eine öffentlichkeitswirksame Seite und eine Admin-Schnittstelle hat, was ist der allgemeine Konsens in der Rails-Gemeinschaft, wie es gemacht wird?The Rails Way - Namespaces

Namespaces, Subdomains oder ganz auf sie verzichten?

Antwort

40

Es gibt keinen wirklichen "Rails-Weg" für Admin-Schnittstellen, eigentlich - Sie können jede mögliche Lösung in einer Reihe von Anwendungen finden. DHH hat angedeutet, dass er Namespaces (mit HTTP-Basic-Authentifizierung) bevorzugt, aber das ist eine einfache Implikation und nicht eine der offiziellen Rails Opinions geblieben.

Das sagte, ich habe in letzter Zeit mit diesem Ansatz guten Erfolg gefunden (Namespacing + HTTP Basic). Es sieht wie folgt aus:

routes.rb:

map.namespace :admin do |admin| 
    admin.resources :users 
    admin.resources :posts 
end 

admin/users_controller.rb:

class Admin::UsersController < ApplicationController 
    before_filter :admin_required 
    # ... 
end 

application.rb

class ApplicationController < ActionController::Base 
    # ... 

    protected 
    def admin_required 
    authenticate_or_request_with_http_basic do |user_name, password| 
     user_name == 'admin' && password == 's3cr3t' 
    end if RAILS_ENV == 'production' || params[:admin_http] 
    end 
end 

Die bedingte auf authenticate_or_request_with_http_basic löst den HTTP Basic Auth im Produktionsmodus oder wenn Sie ?admin_http=true an eine beliebige URL anhängen, so dass Sie c Testen Sie es in Ihren Funktionstests und aktualisieren Sie die URL beim Durchsuchen Ihrer Entwicklungsumgebung manuell.

+2

Ich hasse das. Die Routen erhalten peinliche Namen wie diesen: "new_admin_user_path". Es ist eine Operation für einen Administrator, um einen neuen Benutzer zu erstellen und keinen neuen Administratorbenutzer zu erstellen. Es sollte "admin_new_user_path" heißen. Hässlich. Es lässt mich vermuten, dass ich Namespaces für die falsche Sache benutze. – hoff2

5

In einigen kleineren Anwendungen glaube ich nicht, dass Sie die Admin-Schnittstelle trennen müssen. Verwenden Sie einfach die reguläre Benutzeroberfläche und fügen Sie Administratorfunktionen für angemeldete Benutzer hinzu.

In größeren Projekten würde ich mit einem Namensraum gehen. Die Verwendung einer Sub-Domain fühlt sich für mich aus irgendeinem Grund nicht richtig an.

0

Danke an alle, die meine Frage beantwortet haben. Sieht aus wie der Konsens ist, Namespaces zu verwenden, wenn Sie möchten, da es keinen von DHH gesponserten Rails Way-Ansatz gibt. :)

Nochmals vielen Dank alle!

0

Es ist sicherlich spät für eine Antwort, aber ich brauchte wirklich eine Antwort auf diese Frage: Wie leicht Verwaltungsbereiche zu tun?

Hier ist, was in diesen Tagen verwendet werden kann: Active Admin, mit Ryan Bates's great intro.