2010-03-11 52 views
0

我不確定這裏是否有單個問題,或者我以錯誤的方式接近了這一點,但任何建議都將不勝感激!意大利麪條路線和邀請編碼Bolognese

在應用程序中,當用戶註冊時,他們獲得特權並設置其頁面,然後他們可以通過電子郵件邀請同事。

電子郵件的末尾標有激活碼。示例url將是「/user/new/xxxxxxxxx」。

問題出在這裏:我需要同事能夠創建一個用戶帳戶,只需要他們的基本信息,以便他們可以登錄帳戶並設置應用程序的角落。

當同事在用戶註冊表單上犯了一個錯誤時,url忘記了激活碼,並且跳回了驗證信息和'/ users'的相當裸露的URL。 當同事修改錯誤並點擊註冊時,他們將作爲完全成熟的用戶提交,而不是被邀請的同事。

這是因爲,如果條款我有一個的「用戶/新頁面上

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

我的路由查找網址的代碼參數爲:

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

就像我之前說,我有沒有接近這個完全錯誤的?這裏有一個問題嗎?

UPDATE 這Rails的演員情節幾乎解決了所有的我是有這個問題:Beta Invitations

雖然來區分,如果該人是從邀請來還是不來我只是用這個條件塊:

if [email protected]_id.blank? 

而且效果很好。

回答

1

即時猜測你的控制器看起來是這樣的:

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了。所以,我建議你將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

你是對的,我需要一個隱藏的領域,沒有一個虛擬的屬性,我不得不使用你的代碼。謝謝你的時間。 – 2010-03-15 10:12:51

+0

很高興幫助:) – Apie 2010-03-16 13:22:19

0

一旦他們使用確認碼訪問了該頁面,您可以考慮在<input type="hidden" />標籤中包含確認碼,以確保它在回發之間保存。

否則,您需要修改註冊表單的操作以包含激活碼;是這樣的:

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

我試着像你說的那樣在網址中添加,但是當我點擊提交時,它會將它發送到'users/new/users/new/xxx' - 我似乎無法找到解決方法。我想對URL使用url選項,但隱藏的字段是一個好點! – 2010-03-11 14:41:30

+0

你有':url'選項的前導斜槓? – meagar 2010-03-11 14:44:42

+0

是的,我做到了。我最終使用了我在更新中提到的railscast,並使用了隱藏字段,就像你說的,用虛擬屬性來解決問題。感謝您的意見! – 2010-03-15 10:14:31