1

restful_authenticationwithとeメールアクティベーションを使用するプロジェクトではacts_as_state_machine、ユーザーがEメールリンクからアクティベーションアクションを実行するたびに、ダブルレンダリングエラーが発生します。

デフォルトを使用しています

def activate
   self.current_user = params[:activation_code].blank? ? false : User.find_by_activation_code(params[:activation_code])
   if logged_in? && !current_user.active?
   current_user.activate!
   flash[:notice] = "Signup complete!"
   end
   redirect_back_or_default('/')
end

有効化する、およびデフォルト

def redirect_back_or_default(default)
  redirect_to(session[:return_to] || default)
  session[:return_to] = nil
end

リダイレクトします。リダイレクトメソッドは、他のすべての場合でも同じように呼び出されます。

ダブルレンダリングエラーは、「/」としてルーティングされるページmain_page/homeのレンダリングで発生します。

何を探すべきですか?

4

1 に答える 1

1

ステート マシンとして動作すると、データベースに書き込まれた保存されたレコードがメモリ内のオブジェクトと同期しなくなるという奇妙な動作が発生することがあります。データベースのフィールドが設定されているにもかかわらず、新しくアクティブ化されたユーザーに対応するルビーオブジェクトが更新されていない状況があるに違いありません (逆も同様です)。

「/」に一致するように設定したルートをレンダリングするために実際に実行されるコントローラー アクションを確認する必要がありますが、AASM でのこの不一致によってつまずいている、そのアクションで微妙に不一致のケースがあるに違いありません。そのコントローラー アクションの開始時にユーザー オブジェクトを再読み込みして、問題が解決するかどうかを確認してください。そうでない場合は、状態の変更が実際にデータベースに保存されていることを確認して、デバッグを開始してください。

于 2008-10-14T08:21:23.260 に答える