0

ここに問題が1つあるのか、間違った方法でアプローチしたのかはよくわかりませんが、何か提案をいただければ幸いです。

アプリケーションでは、ユーザーがサインアップして特権を取得し、ページが設定されると、電子メールで同僚を招待できます。

メールの最後にアクティベーションコードがタグ付けされています。URLの例は「/user/ new/xxxxxxxxx」です。

問題は次のとおりです。同僚がアカウントにログインしてアプリの隅を設定できるように、基本情報だけを使用してユーザーアカウントも作成できるようにする必要があります。

同僚がユーザーサインアップフォームを間違えると、URLはアクティベーションコードがあることを忘れ、検証メッセージと「/users」のかなり裸のURLでジャンプして戻ります。同僚が間違いを修正して[サインアップ]をクリックすると、招待された同僚ではなく、本格的なユーザーとして送信されます。

これは、「users/new」ページにif句があるために発生します

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

URLのコードパラメータを見つけるための私のルーティングは次のとおりです。

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

前に言ったように、私はこれに完全に間違ってアプローチしましたか?ここに1つの問題がありますか?

このRailsキャストエピソードを更新する私が抱えていた問題のほぼすべてを解決しました:ベータ版の招待状

その人が招待状から来ているかどうかを区別するために、私はこの条件ブロックを使用しました:

if !@user.invitation_id.blank?

そしてそれはうまくいきました。

4

2 に答える 2

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が引き続き含まれます。

于 2010-03-11T14:38:25.373 に答える
0

確認コードを使用してページにアクセスしたら、<input type="hidden" />ポストバック間で確実に保存されるように、タグに確認コードを含めることを検討してください。

それ以外の場合は、登録フォームのアクションを変更して、アクティベーションコードを含める必要があります。このようなもの:

form_for @user, :url => "/users/new/#{@activation_code}" do |f|
# ...
end
于 2010-03-11T14:32:40.703 に答える