Domanda

In realtà non sono sicuro se c'è un solo problema qui o ho affrontato questo nel modo sbagliato, ma qualche suggerimento sarebbe molto apprezzato!

In applicazione quando un utente si iscrive ottengono privilegi e la loro pagina viene impostata su, possono poi invitare i colleghi per e-mail.

L'e-mail ha un codice di attivazione targhetta su alla fine. Un esempio URL sarebbe " / user / new / xxxxxxxxx ".

Ecco il problema: Ho bisogno del collega di essere in grado di creare un account utente e, con solo il loro informazioni di base, in modo che possano accedere al conto e impostare il loro angolo dell'app up .

Quando il collega commette un errore l'utente modulo di iscrizione, l'url dimentica c'è un codice di attivazione, e torna indietro con messaggi di convalida e una bella nuda URL '/ utenti'. Quando il collega modifica i loro errori e clic si iscrivono, sono presentate come un utente a pieno titolo, non un collega invitato.

Questo accade perché ho un se la clausola sulla 'nuova utenti /' pagina

<% if @activation_code %>
  Show colleague messages of invitation and happiness
<% else %>
  Show fully fledged user ego stroking messages
<% end %>

Il mio percorso per trovare il parametro codice della url è:

map.signup '/users/new/:code', :controller => 'users', :action => 'new', :code => nil

Come ho detto prima, hanno mi sono avvicinato a questo completamente sbagliato? è c'è un problema qui?

Aggiorna Questo Rails Episodio Cast Risolto quasi tutti i problemi che ho avuto: Beta Inviti

Anche se per distinguere se la persona era venuta da un invito o no ho solo usato questo blocco condizioni:

if !@user.invitation_id.blank?

e che ha funzionato grande.

È stato utile?

Soluzione

Im indovinare il controller si presenta in questo modo:

def create
  if @user = User.create(params[:user]) && @user.new_record?
    #take the user to where you want them to go
  else
    #there was an error
    flash[:error] = "Oops, blah blah blah"
    render :action => "new"
  end
end

Il problema è che non avete il @activation_code nella vista più. Quindi, vorrei suggerire che si passa l'activation_code schiena in un campo di modulo nascosto.

def create
  @activation_code = params[:activation_code]
  if @user = User.create(params[:user]) && @user.new_record?
    #take the user to where you want them to go
  else
    #there was an error
    flash[:error] = "Oops, blah blah blah"
    render :action => "new"
  end
end

In questo modo quando si esegue il rendering del "nuovo" vista dalla azione Create il vostro vista avrà ancora la @activation_code necessaria per aiutarlo a rendere gli elementi condizionali appropriate.

Altri suggerimenti

Una volta che hanno visitato la pagina utilizzando il codice di conferma, si potrebbe considerare tra cui il codice di conferma in un tag <input type="hidden" /> per assicurare che è salvato tra i postback.

In caso contrario, è necessario modificare l'azione per il vostro segno-up form per inserire il codice di attivazione; qualcosa di simile a questo:

form_for @user, :url => "/users/new/#{@activation_code}" do |f|
# ...
end
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top