0

こんにちは、私はこれが一般的な問題であることを知っていますが、私はそれを働かせることができません..メールリンクからアカウントを有効にする必要があります..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]})
4

1 に答える 1

3

引数に aconstraints: { email: /[^\/]+/ }を追加しようとしましたか? matchおそらく、.過度に貪欲な正規表現によって食い尽くされます。

于 2013-08-19T03:31:19.770 に答える