Pregunta

No estoy realmente seguro de si hay un solo problema aquí o que se han acercado a esto en el camino equivocado, pero cualquier sugerencia sería muy apreciada!

En la aplicación cuando un usuario se registra que obtienen privilegios y su página consigue el sistema, ellos pueden invitar a los colegas por correo electrónico.

El correo electrónico tiene un código de activación etiquetado en el extremo. Un ejemplo de URL sería " / usuario / nueva / xxxxxxxxx ".

Aquí está el problema: necesito el colega que ser capaz de crear una cuenta de usuario, así, con sólo su información básica, para que puedan acceder a la cuenta y establecer su esquina de la aplicación .

Cuando el colega comete un error en el usuario formulario de registro, la url olvida que hay un código de activación, y salta de nuevo con mensajes de validación y una URL bastante básico de '/ usuarios'. Cuando el colega modifica sus errores y los clics se registra, se presentan como un usuario de pleno derecho, no un colega invitado.

Esto sucede porque si tengo una cláusula sobre la '/ usuarios nueva página

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

Mi enrutamiento para encontrar el parámetro de código de la dirección URL es:

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

Como he dicho antes, me acercaba a tener esta completamente equivocado? Se está ahí un problema aquí?

Actualizar Este episodio Rieles Cast resuelto casi todos los problemas que tenía: Beta invitaciones

A pesar de distinguir si la persona que venía de una invitación o no me acaba de utilizar este bloque condiciones:

if !@user.invitation_id.blank?

y que funcionaba muy bien.

¿Fue útil?

Solución

Im adivinar su controlador tiene el siguiente aspecto:

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

El problema es que usted no tiene la @activation_code en la vista nunca más. Por lo tanto, sugeriría que se pasa el activation_code de vuelta en un campo de formulario oculto.

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 esta manera cuando se renderiza el "nuevo" punto de vista de la acción crear su vista todavía tendrá la @activation_code necesario para ayudar a que hacen los elementos condicionales apropiadas.

Otros consejos

Una vez que han visitado la página utilizando el código de confirmación, es posible que teniendo en cuenta que incluye el código de confirmación en una etiqueta <input type="hidden" /> para asegurar que se guarda entre las devoluciones de datos.

En caso contrario, es necesario modificar la acción para su inscripción formulario para incluir el código de activación; algo como esto:

form_for @user, :url => "/users/new/#{@activation_code}" do |f|
# ...
end
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top