Pergunta

Eu realmente não estou certo se há um único problema aqui ou eu ter abordado esta no caminho errado, mas todas as sugestões seria muito apreciada!

Na aplicação quando um usuário assina-se que recebem privilégios e sua página é criada, eles podem convidar colegas por e-mail.

O e-mail tem um código de ativação marcado na extremidade. Um exemplo url seria " / user / new / xxxxxxxxx ".

Aqui está o problema: Preciso do colega para ser capaz de criar uma conta de usuário, bem como, com apenas suas informações básicas, para que eles possam acessar a conta e configurar seu canto do aplicativo .

Quando o colega comete um erro para o usuário se inscrever forma, os esquece url existe um código de ativação, e salta para trás com mensagens de validação e um url bonita nua de '/ usuários'. Quando o colega altera seus erros e cliques se inscrever, eles são submetidos como um usuário de pleno direito, não um colega convidou.

Isso acontece porque eu tenho um se cláusula relativa à 'usuários / nova' página

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

Meu roteamento para encontrar o parâmetro código da url é:

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

Como eu disse antes, tenho abordado este completamente errado? é se há um problema aqui?

Atualizar Este Rails Episódio Elenco Resolvido quase todos os problemas que eu tinha: Beta Convites

Apesar de distinguir se a pessoa estava vindo de um convite ou não eu usei apenas este bloco condições:

if !@user.invitation_id.blank?

e que funcionou muito bem.

Foi útil?

Solução

Im adivinhando seus olhares controlador como este:

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

O problema é que você não tem o @activation_code na vista mais. Então, eu sugiro que você passe a volta activation_code em um campo de formulário 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

Desta forma, quando você processar a visão "nova" a partir da ação criar a sua visão ainda terá a @activation_code necessário para ajudar a tornar os elementos condicionais apropriados.

Outras dicas

Uma vez que visitaram a página usando o código de confirmação, você pode considerar incluindo o código de confirmação em uma tag <input type="hidden" /> para garantir que ele é salvo entre postbacks.

Caso contrário, é necessário modificar a ação para o seu formulário de inscrição para incluir o código de ativação; algo como isto:

form_for @user, :url => "/users/new/#{@activation_code}" do |f|
# ...
end
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top