Маршрутизация спагетти-рельсов и кодирование приглашений Болоньезе

StackOverflow https://stackoverflow.com/questions/2425569

Вопрос

Я не совсем уверен, есть ли здесь одна проблема или я подошел к этому неправильно, но любые предложения будут очень признательны!

В приложении, когда пользователь регистрируется, он получает привилегии и настраивает свою страницу, а затем может приглашать коллег по электронной почте.

В конце письма есть код активации.Пример URL-адреса: "/пользователь/новый/xxxxxxxxx".

Вот проблема: Мне нужно, чтобы коллега также мог создать учетную запись пользователя, используя только свою основную информацию, чтобы он мог войти в учетную запись и настроить свою часть приложения.

Когда коллега допускает ошибку в форме регистрации пользователя, URL-адрес забывает, что существует код активации, и возвращается назад с сообщениями проверки и довольно пустым URL-адресом «/users».Когда коллега исправляет свои ошибки и нажимает кнопку «Зарегистрироваться», он представляется как полноправный пользователь, а не приглашенный коллега.

Это происходит потому, что у меня есть предложение if на странице «пользователи/новые».

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

Мой маршрут для поиска параметра кода URL-адреса:

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

Как я уже говорил, я подошел к этому совершенно неправильно?здесь есть одна проблема?

ОБНОВЛЯТЬЭтот эпизод Rails Cast решил почти все мои проблемы: Приглашения на бета-тестирование

Хотя, чтобы отличить, пришёл человек по приглашению или нет, я просто использовал вот такой блок условий:

if !@user.invitation_id.blank?

и это сработало отлично.

Это было полезно?

Решение

Я предполагаю, что ваш контроллер выглядит так:

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

Проблема в том, что у вас больше нет @activation_code в представлении.Итак, я бы посоветовал вам передать код активации обратно в скрытое поле формы.

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

Таким образом, когда вы визуализируете «новое» представление из действия создания, ваше представление по-прежнему будет иметь необходимый @activation_code, чтобы помочь ему отображать соответствующие условные элементы.

Другие советы

После того, как они посетили страницу с помощью кода подтверждения, вы можете рассмотреть возможность включения кода подтверждения в <input type="hidden" /> тег, чтобы гарантировать, что он сохраняется между обратными передачами.

В противном случае вам необходимо изменить действие в форме регистрации, включив в него код активации;что-то вроде этого:

form_for @user, :url => "/users/new/#{@activation_code}" do |f|
# ...
end
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top