11 Stimmen

Rails: (Entwickeln Sie) zwei verschiedene Methoden für neue Benutzer?

Ich habe eine Rails 3 app mit Authentifizierung Setup mit Entwickeln Sie con el registerable Modul aktiviert.

Ich möchte, dass neue Benutzer, die sich über unser externes Registrierungsformular anmelden, die vollständige Devise registerable Modul, was jetzt geschieht.

Ich möchte aber auch die admin Benutzer in der Lage sein, neue Benutzer direkt zu erstellen, unter Umgehung (denke ich) der Devise registerable Modul.

  • Avec registerable deaktiviert ist, funktioniert mein Standard UsersController so, wie ich es mir für die admin Benutzer, wie jedes andere Schienengerüst. Allerdings können sich neue Nutzer jetzt nicht mehr selbständig registrieren.

  • Avec registerable aktiviert ist, wird mein Standard UsersController nie für die neue Benutzeraktion aufgerufen (Aufruf Devise::RegistrationsController stattdessen), und meine CRUD-Aktionen scheinen überhaupt nicht zu funktionieren (ich werde zurück auf meine Root-Seite ohne neuen Benutzer erstellt und keine Flash-Meldung). Hier ist das Protokoll von der Anforderung:

    Started POST "/users" for 127.0.0.1 at 2010-12-20 11:49:31 -0500   
    Processing by Devise::RegistrationsController#create as HTML   
    Parameters: {"utf8"=>"", "authenticity_token"=>"18697r4syNNWHfMTkDCwcDYphjos+68rPFsaYKVjo8Y=", "user"=>{"email"=>"test@test.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "role"=>"manager"}, "commit"=>"Create User"}   
    SQL (0.9ms)   ...
    
    User Load (0.6ms)  SELECT "users".* FROM "users" WHERE ("users"."id" = 2) LIMIT 1   
    SQL (0.9ms)   ...
    
    Redirected to http://test-app.local/ Completed 302 Found in 192ms

... aber ich bin in der Lage, neue Benutzer über das äußere Formular zu registrieren.

Wie kann ich erreichen, dass diese beiden Methoden zusammen funktionieren, so dass meine admin Benutzer kann manuell neue Benutzer anlegen und können sich Gastnutzer selbständig registrieren?


Ich habe meine Benutzer-Controller-Setup für Standard-CRUD:

class UsersController < ApplicationController
  load_and_authorize_resource

  def index
    @users = User.where("id NOT IN (?)", current_user.id) # don't display the current user in the users list; go to account management to edit current user details
  end

  def new
    @user = User.new
  end

  def create
    @user = User.new(params[:user])
    if @user.save
      flash[:notice] = "#{ @user.email } created."
      redirect_to users_path
    else
      render :action => 'new'
    end
  end

  def edit
  end

  def update
    params[:user].delete(:password) if params[:user][:password].blank?
    params[:user].delete(:password_confirmation) if params[:user][:password].blank? and params[:user][:password_confirmation].blank?
    if @user.update_attributes(params[:user])
      flash[:notice] = "Successfully updated User."
      redirect_to users_path
    else
      render :action => 'edit'
    end
  end

  def delete
  end

  def destroy
    redirect_to users_path and return if params[:cancel]
    if @user.destroy
      flash[:notice] = "#{ @user.email } deleted."
      redirect_to users_path
    end
  end

end

Und meine Routen sind wie folgt aufgebaut:

TestApp::Application.routes.draw do

  devise_for :users

  devise_scope :user do
    get "/login", :to => "devise/sessions#new", :as => :new_user_session
    get "/logout", :to => "devise/sessions#destroy", :as => :destroy_user_session
  end

  resources :users do
    get :delete, :on => :member
  end

  authenticate :user do
    root :to => "application#index"
  end
  root :to => "devise/session#new"

end

12voto

Ariejan Punkte 10521

Sie sollten einen separaten Controller für die Verwaltung Ihrer Benutzer erstellen. Ich erstelle immer Administrator-Benutzer und gebe ihnen einen speziellen Namensraum, in dem sie arbeiten können. Lassen Sie mich das veranschaulichen:

config/routes.rb

devise :users # Allow users to register here

namespace :admin do
  resources :users # Have the admin manage them here.
end

3 Stimmen

Duh! Das war die geheime Soße, die ich gesucht habe. Löst so viele Probleme... entschuldigt mich, während ich meinen Kopf gegen eine Wand schlage. Ich danke Ihnen.

0 Stimmen

Wie man Namespace in Controller geben?

0 Stimmen

Hier ist ein bisschen mehr Detail darüber, wie man Namespaces in Rails verwendet. Sie müssen einen Ordner in app > controllers erstellen - in diesem Beispiel würden Sie einen neuen Ordner admin in den controllers-Ordner legen und dann Ihren neuen users-Controller dort ablegen. Die Dateien sollten dann über applcom/admin/users zugänglich sein -- guides.rubyonrails.org/

0voto

lfx_cool Punkte 5056

Müssen Sie diese Konfiguration in Ihre routes.rb einfügen

devise_for :users, :controllers => {:registrations => "users/registrations" }

dann implementieren Sie Ihren eigenen Registrierungs-Controller wie folgt

class Users::RegistrationsController < Devise::RegistrationsController
  def new
    ...
  end

  ## other actions 
end

dann können Sie Ihre eigenen Ansichten schreiben Wenn Sie den Standard-Controller von Devise überschreiben, gehen möglicherweise einige Funktionen verloren, z. B. Validierungen. Sie müssen diese selbst implementieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X