2013-08-18 79 views
0

你好,我知道這是普遍的問題,但我不能讓它的工作..我需要帳戶與電子郵件鏈接激活.. URL看起來像http://domain.tld/activation/[email protected]/d4sa89dsa98,我想訪問來自控制器參數:-)Rails的PARAMS在URL

的routes.rb

match "activation/:email/:activation_key" => "frontend#activation", :via => :get 

frontend_controller.rb

def activation 
    @user = User.find(:conditions => {:email => params[:email], activation_key => params[:activation_key]}) 
    render "activation" 
    end 

和即時得到錯誤

No route matches [GET] "/activation/[email protected]/a46d4sa8dsa68d" 

activation.html.erb

<% if @user %> 
Activation successful. 
<% else %> 
Activation key is invalid. 
<% end %> 

編輯:------------------ -------------------------------------------------- -------------------------------------------------- -----

我替換:電子郵件參數:id參數,因爲它看起來更好,我不是當然,如果 Array.new(32){Random.new.rand(36).to_s(36)}.join是唯一的字符串,但現在並不重要。

路線

match "activation/:id/:activation_key" => "frontend#activation", :via => :get 

耙路由

GET /activation/:id/:activation_key(.:format) frontend#activation 

前端控制器

def activation 
    @user = User.find(:conditions => {:id => params[:id], :activation_key => params[:activation_key]}) 
    render "activation" 
    end 

錯誤

Couldn't find User without an ID 

但這WORKS所以這個問題是在條件

@user = User.find(params[:id]) 

SOLUTION

@user = User.find(:first, :conditions => {:id => params[:id], :activation_key => params[:activation_key]}) 
+1

爲什麼你在那裏有電子郵件?我從來沒有見過。如果我是你,我只會使用激活碼。 – Mischa

+0

你是絕對正確的,我不知道該生成器的唯一性,所以我添加電子郵件,但用戶的id會更好,或者我可以使用'SecureRandom.uuid' ..我改變了:電子郵件地址:id,但現在它說'Couldn' t找到沒有ID的用戶,這意味着'params [:id]'不工作..我將編輯問題的更多信息 – Muflix

回答

3

您是否嘗試過加入constraints: { email: /[^\/]+/ }match的說法?可能.被過分貪婪的正則表達式吞噬。

+0

你好,謝謝,我換了電子郵件的ID ..請看看編輯的問題 – Muflix