Frage

Ich bin nicht wirklich sicher, ob es ein einziges Problem hier ist, oder ich habe dies in die falsche Art und Weise angegangen, aber irgendwelche Vorschläge wäre sehr dankbar!

In der Anwendung, wenn sich ein Benutzer auf sie bekommen Privilegien und ihre Seite wird eingerichtet haben, können sie dann einladen Kollegen per E-Mail.

Die E-Mail hat einen Aktivierungscode am Ende markiert. Ein Beispiel url wäre " / user / neu / xxxxxxxxx ".

Hier ist das Problem: Ich brauche die Kollegen der Lage sein, als auch ein Benutzerkonto zu erstellen, mit nur ihren grundlegenden Informationen, so können sie das Konto anmelden und ihre Ecke der App einrichten .

Wenn der Kollege einen Fehler auf dem Benutzerformular anmelden macht, vergisst die URL gibt es einen Aktivierungscode, und springt zurück mit Validierungsmeldungen und einer hübschen nackten URL "/ Benutzer. Wenn die Kollegen ihre Fehler und Klicks ändert sich anmelden, werden sie als vollwertige Benutzer übermittelt, kein eingeladen Kollegen.

Dies geschieht, weil ich habe eine if-Klausel auf der ‚Benutzer / new‘ Seite

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

Mein Routing den Code Parameter der URL zu finden ist:

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

Wie ich schon sagte, habe ich diese völlig falsch angegangen? ist es ein Problem hier?

UPDATE Diese Schienen Auswahl der Folge Gelöst fast alle Probleme, die ich hatte: Beta Einladungen

Obwohl zu unterscheiden, wenn die Person aus einer Einladung kommen würde oder nicht, dass ich nur verwenden diese Bedingung Block:

if !@user.invitation_id.blank?

und das hat super funktioniert.

War es hilfreich?

Lösung

Im Ihr Controller erraten sieht wie folgt aus:

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

Das Problem ist, dass Sie die @activation_code mehr in der Ansicht nicht haben. Also, ich würde vorschlagen, dass Sie die activation_code wieder in einem versteckten Formularfeld übergeben.

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

Auf diese Weise, wenn Sie den „neuen“ Blick von der Aktion erstellen Ihre Sicht machen wird es noch die erforderliche @activation_code helfen, die entsprechenden bedingten Elemente zu machen.

Andere Tipps

Sobald sie die Seite mit dem Bestätigungscode besucht haben, könnten Sie erwägen, einschließlich dem Bestätigungscode in einem <input type="hidden" />-Tag, um sicherzustellen, dass es zwischen Postbacks gespeichert wird.

Andernfalls müssen Sie die Aktion für Ihr Anmeldeformular ändern, um den Aktivierungscode zu umfassen; so etwas wie folgt aus:

form_for @user, :url => "/users/new/#{@activation_code}" do |f|
# ...
end
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top