Tengo una aplicación Rails 3 con configuración de autenticación usando Devise con el módulo registerable
habilitado.Rails: (Devise) ¿Dos métodos diferentes para nuevos usuarios?
Quiero tener nuevos usuarios que se registren utilizando nuestro formulario de registro externo para usar el módulo completo registerable
Devise, que está sucediendo ahora.
Sin embargo, también quiero que el usuario admin
pueda crear nuevos usuarios directamente, omitiendo (creo) el módulo registerable
de Devise.
Con
registerable
discapacitados, mi UsersController estándar funciona como yo quiero que para el usuarioadmin
, al igual que cualquier otro andamio carril. Sin embargo, ahora los nuevos usuarios no pueden registrarse por sí mismos.Con
registerable
habilitado, mi UsersController estándar nunca se llama a la nueva acción del usuario (llamandoDevise::RegistrationsController
en su lugar), y no parecen mis acciones CRUD trabajar en absoluto (I consigue descargado de nuevo en mi página de raíz con ningún nuevo usuario creado y sin mensaje flash). Aquí está el registro de la solicitud: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"=>"[email protected]", "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
... pero yo soy capaz de registrar nuevos usuarios a través de la forma exterior.
¿Cómo puedo obtener tanto de estos métodos para trabajar juntos, de manera que mi usuario admin
puede crear manualmente nuevos usuarios y usuarios invitados pueden inscribirse por su cuenta?
tengo mi configuración de controlador de Usuarios para CRUD estándar:
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
Y mi configuración de rutas de la siguiente manera:
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
Duh! Esa era la salsa secreta que estaba buscando. Resuelve tantos problemas ... discúlpame mientras golpeo mi cabeza contra la pared. Gracias. – neezer
¿Cómo dar espacio de nombres en el controlador? –
Aquí hay un poco más de detalles sobre cómo usar espacios de nombres en Rails.Necesitarás crear una carpeta en la aplicación> Controladores: en este ejemplo, colocarías un nuevo administrador de carpeta en la carpeta Controladores y luego pondrás tu nuevo controlador de usuario allí. Los archivos deben ser accesibles a través de applcom/admin/users - http://guides.rubyonrails.org/routing.html#controller-namespaces-and-routing –