2013-06-08 3 views
6

Nella mia app Ruby, sto usando la gemma 'devise' per l'autenticazione, ma voglio personalizzare le viste, generare le viste devise dopo averle personalizzate e salvate in la cartella di sviluppo è parziale, perché voglio renderli in un'altra vista.Rails Devise Registrazione personalizzata e accesso ai problemi della stessa pagina

Quindi, i miei problemi sono, il new/sessions funziona, ma quando provo a registrarmi, sembra che ci sia un problema con la registrazione del modulo. Vedi login form qui.

Ho letto molto su come personalizzare il layout nella documentazione di progettazione, ma sono un po 'confuso su come implementare per rendere il rendering del modulo al di fuori della cartella delle viste di sviluppo.

risposta

12

In realtà, la tua domanda è la stessa di this question, ma ti spiegherò un po 'e sto provando a farlo.

  • In primo luogo, è necessario personalizzare la procedura di registrazione. (customize devise)

  • In secondo luogo, è possibile visualizzare un modulo di accesso personalizzato accanto al modulo di registrazione. (wiki)


Esempio passo per passo il mio progetto di esempio (solo ora ho provato costruire app)

percorso per disposizione testamentaria di registrazione personalizzare e sessione

devise_scope :user do 
    # using login path for registration 
    get '/login' => 'registrations#new', :as => :new_user_registration 
    post '/signup' => 'registrations#create', :as => :user_registration 
    post '/signin' => 'sessions#create', :as => :user_session 
end 

Crea controller per personalizzare la registrazione e l'impostazione della sessione, ad esempio:

# customize registration controller 
class RegistrationsController < Devise::RegistrationsController 
    layout 'login' 
    skip_before_filter :require_no_authentication 
    before_filter :resource_name 

    def resource_name 
    :user 
    end 

    def new 
    @user = User.new 
    end 

    def create 
    @user = User.new(params[:user]) 
    ... 
    ... 
    end 
end 

# customize session controller 
class SessionsController < Devise::SessionsController 
    def create 
    super 
    end 
end 

Creare viste di registrazioneapp/registrations/new.html.erb

accesso Put e modulo di iscrizione inapp/registrations/new.html.erb. (a fianco del modulo di iscrizione si presenta come il vostro progetto)

<%= form_for(resource, :as => resource_name, :url => user_session_path(resource_name)) do |f| %> 
    .... 
<% end %> 

<%= form_for(resource, :as => resource_name, :url => user_registration_path(resource_name)) do |f| %> 
    .... 
<% end %> 

E per ultimo, mettere questo in aiuto applicazione

def resource_name 
    :user 
end 

def resource 
    @resource ||= User.new 
end 

def devise_mapping 
    @devise_mapping ||= Devise.mappings[:user] 
end 

Spero che questo aiuto!

+0

Grazie, proverò a implementarlo, come hai detto, guarda come sarà –

+0

Funziona molto bene, a volte mi viene richiesto di registrarti (ad esempio se provo a registrarmi con un nome utente errato, ma è probabilmente "colpa mia" ...) –

+1

@AndyHayden è una vulnerabilità di sicurezza se si reindirizza quando si indovina un nome utente errato. Si perdono i nomi utente che * si * hanno. Si prega di non farlo! – quantumpotato