你好,我知道這是普遍的問題,但我不能讓它的工作..我需要帳戶與電子郵件鏈接激活.. 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]})
爲什麼你在那裏有電子郵件?我從來沒有見過。如果我是你,我只會使用激活碼。 – Mischa
你是絕對正確的,我不知道該生成器的唯一性,所以我添加電子郵件,但用戶的id會更好,或者我可以使用'SecureRandom.uuid' ..我改變了:電子郵件地址:id,但現在它說'Couldn' t找到沒有ID的用戶,這意味着'params [:id]'不工作..我將編輯問題的更多信息 – Muflix