2010-03-11 5 views
0

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

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

У электронного сообщения есть код активации с тегом на конце. Пример url будет «/user/new/xxxxxxxxx».

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

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

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

<% 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 

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

UPDATE Это Рельсы Cast Эпизод решаемые почти все проблемы, у меня был: Beta Invitations

Хотя отличить, если человек придет с приглашением или нет, я просто использовал условия блок:

if [email protected]_id.blank? 

И это отлично работает.

ответ

1

Im угадать ваш контроллер выглядит следующим образом:

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, чтобы помочь ему вынести соответствующие условные элементы.

+0

Вы были правы, что мне нужно было скрытое поле, и без виртуального атрибута мне пришлось использовать ваш код. Спасибо за ваше время. –

+0

Рад помочь :) – Apie

0

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

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

form_for @user, :url => "https://stackoverflow.com/users/new/#{@activation_code}" do |f| 
# ... 
end 
+0

Я попытался добавить в URL-адрес, как вы сказали, но я, когда нажимаю кнопку отправки, отправляет его «пользователям/новым/пользователям/новым/ххх» - я не могу найти способ обойти это. Я хотел бы использовать опцию url против url, но скрытое поле - хороший момент! –

+0

У вас есть ведущая косая черта на вашем параметре ': url'? – meagar

+0

Да, да. Я закончил использовать railscast, о котором я упоминал в своем обновлении, и использовал скрытое поле, как вы сказали, и виртуальные атрибуты для решения проблемы. спасибо за вход! –