2012-02-16 10 views
5

Sto tentando di includere un accesso (nome utente/password) nell'intestazione del mio application.html.erb. Sto ottenendo questo errore:Rails 3 esegue il rendering parziale da un altro controller (errore: ActionView :: MissingTemplate)

Missing partial /login with {:handlers=>[:rjs, :builder, :rhtml, :erb, :rxml], :locale=>[:en, :en], :formats=>[:html]} in view paths "/app/views" 

Questo sta accadendo quando faccio questa chiamata nel mio application.html.erb:

<%= render '/login' %> 

'/ login' è definito nel mio routes.rb come:

match '/login' => "sessions#new", :as => "login" 

UPDATE: ecco il mio controller di sessioni:

class SessionsController < ApplicationController 

    def create 
    if user = User.authenticate(params[:email], params[:password]) 
     session[:user_id] = user.id 
     user.last_login = Time.now 
     user.save 
     redirect_to root_path, :notice => "login successful" 
     else 
     flash.now[:alert] = "invalid login/password combination " # don't show pass + params[:password] 
     #render :action => "new" 
     redirect_to login_path, :notice => "wrong user pass" 
     end 
    end 

    def destroy 
    reset_session 
     redirect_to root_path, :notice => "successfully logged out" 
    end 

end 

Ho visto in altri post che questo può essere dovuto alla mancata definizione di una variabile in un'azione controller, ma poiché questa è una sessione, ed è in application.html.erb (application_controller.rb), non lo sono certo come si fa Qualcuno sa come fare questo? Grazie!

+0

dove si trova esattamente il vostro parziale? E, perché stai assegnando un percorso percorsi nel tuo rendering? – prasvin

+0

il partial è in views/sessions/new.html.erb. il motivo per cui sto usando '/ login' nella mia chiamata al rendering è perché ho pensato che renderebbe il partial view/sessions/new.html.erb. – botbot

+0

vedere la risposta aggiornata – prasvin

risposta

9

<%= render "sessions/login", :@user => User.new %>

renderà login parziale di sessioni vista, cioè '_login.html.erb' in visite/sessioni e un'istanza @user al nuovo utente in modo che possa essere direttamente riferimento nella parziale:

form_for @user, :url => sessions_path do |f| 
    f.text_field :email 
+0

ho aggiornato il mio post per mostrare il codice del mio controller di sessione. Sono un po 'nuovo in questo modo, non capisco davvero perché dovrei passare lungo un: @user => User.new? è così la linea: se user = User.authenticate (params [: email], params [: password]) non avrà esito negativo nel controller di sessione? Stavo seguendo un tutorial in cui dovevo aggiungere un nuovo file.html.erb alla mia cartella/sessions, ma ora che guardo il mio controller, ha solo un metodo di creazione e un metodo di detroy. un po 'confuso. – botbot

+0

Se stai cercando di creare una sorta di sistema di autenticazione con questo, ti consiglio davvero di usare la gemma Devise https://github.com/plataformatec/devise. È super facile e molto molto utile. Crea da solo la sessione, fornisce utili helper (come current_user) e ci libera dalla gestione dei problemi della sessione. Preferirei lasciare la parte di autenticazione a Devise. In questo modo se l'utente non è autenticato, Devise lo reindirizzerà alla pagina di accesso. Ora puoi progettare la pagina di accesso come desideri e rendere il login (nome utente/password) dove vuoi. – prasvin

+1

Ora, andando direttamente alla tua domanda, suggerisco di creare un partial '_login.html.erb' nelle viste/sessioni. Quindi, effettua il login parziale come sopra. Il motivo '@ utente' è passato perché il partial ha una forma per' @ user', quindi è istanziato con 'User.new'. Compila il partial con il modulo per l'utente, come mostrato sopra, contenente email, password e, se necessario, altri campi. Quando il modulo viene inviato, i parametri vengono passati alle sessioni # create becoz dell'url specificato nel modulo. Il codice non è stato verificato, ma dovrebbe essere d'aiuto. Ma, per favore guarda prima Devise e usalo se soddisfa i tuoi requisiti. – prasvin

0

Controlla la tua estensione del file nel mio estensione caso era rhtml, ho cambiato in html.erb.

Ora funziona correttamente.

Nota:

Questo file con rhtml estensione stava lavorando bene in rotaie < = 3.0.10. Ma ha smesso di funzionare nelle guide 3.1.12. Così ho cambiato la sua estensione come menzionato sopra.

Problemi correlati