Question

Je ne suis pas vraiment sûr s'il y a un problème ici ou j'ai abordé ce dans le mauvais sens, mais toute suggestion serait grandement appréciée!

Dans l'application lorsqu'un utilisateur se place qu'ils obtiennent des privilèges et de leur page est mis en place, ils peuvent inviter des collègues par e-mail.

Le courriel a un code d'activation marqué sur la fin. Un exemple d'URL serait " / user / new / xxxxxxxxx ".

Voici le problème: J'ai besoin collègue de pouvoir créer un compte d'utilisateur ainsi, avec seulement leurs informations de base, afin qu'ils puissent se connecter au compte et mettre en place leur coin de l'application .

Quand le collègue fait une erreur sur l'utilisateur formulaire d'inscription, l'URL oublie il y a un code d'activation, et revient en arrière avec des messages de validation et une url assez nue « utilisateurs / ». Lorsque le collègue modifie leurs erreurs et de clics inscrire, ils sont soumis en tant qu'utilisateur à part entière, pas un collègue invité.

Cela se produit parce que j'ai une si clause sur la page 'utilisateurs / new'

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

Mon routage pour trouver le paramètre de code de l'URL est:

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

Comme je l'ai dit, ai-je approché ce complètement faux? est est-il un problème ici?

UPDATE Ce Rails Cast Episode résolu presque tous les problèmes que je rencontrais: Beta Invitations

Bien distinguer si la personne venait d'une invitation ou non je viens d'utiliser ce bloc de conditions:

if !@user.invitation_id.blank?

et qui fonctionnait très bien.

Était-ce utile?

La solution

Im deviner votre contrôleur ressemble à ceci:

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

Le problème est que vous n'avez pas le @activation_code dans la vue plus. Donc, je suggère que vous passez le activation_code retour dans un champ de formulaire caché.

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

De cette façon, lorsque vous restituez la « nouvelle » vue de l'action create votre vue sera toujours le @activation_code nécessaire pour l'aider à rendre les éléments conditionnels appropriés.

Autres conseils

Une fois qu'ils ont visité la page en utilisant le code de confirmation, vous pourriez envisager d'inclure le code de confirmation dans une balise <input type="hidden" /> pour vous assurer qu'elle est enregistrée entre postbacks.

Dans le cas contraire, vous devez modifier l'action pour votre formulaire d'inscription pour inclure le code d'activation; quelque chose comme ceci:

form_for @user, :url => "/users/new/#{@activation_code}" do |f|
# ...
end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top