こんにちは、私はこれが一般的な問題であることを知っていますが、私はそれを働かせることができません..メールリンクからアカウントを有効にする必要があります..URLは次のようhttp://domain.tld/activation/name@domain.tld/d4sa89dsa98
になり、コントローラーからそのパラメーターにアクセスしたい:-)
ルート.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/name@email.tld/a46d4sa8dsa68d"
私のactivation.html.erb
<% if @user %>
Activation successful.
<% else %>
Activation key is invalid.
<% end %>
編集: - - - - - - - - - - - - - - - - - - - - - - - - -------------------------------------------------- -------------------------
:email パラメーターを :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
しかし、これは機能するので、問題は状態にあります
@user = User.find(params[:id])
解決
@user = User.find(:first, :conditions => {:id => params[:id], :activation_key => params[:activation_key]})