2

ブログ アプリでは、すべてのユーザーがフォームにアクセスしてコメントを投稿したいと考えています。

ユーザーがコメント フォームを送信すると、ログインしていない場合、Devise sign_in フォームにリダイレクトされます。

before_filter :authenticate_user!, :except => [:index, :show, :new]

ユーザーがサインインしたら、コメントフォームにリダイレクトしてすべてのフィールドに入力するにはどうすればよいですか?

前もって感謝します

4

2 に答える 2

4

サインインするたびにユーザーにコメント フォームを表示させたい場合は、ApplicationController を追加します。

#after_sign_in_path_for is called by devise
def after_sign_in_path_for(resource_or_scope)
  comment_path...
end

ユーザーをサインイン前のページに戻したい場合は、現在のコントローラーとアクションをセッションに保存し、リダイレクトして戻すことができます。

session[:pre_login_controller] = params[:controller]
session[:pre_login_action] = params[:action]

その後 :

def after_sign_in_path_for(resource_or_scope)
  if session[:pre_login_controller] && session[:pre_login_action]
    "#{session[:pre_login_controller]}/#{session[:pre_login_action]}"
  else
     some default path -- root url or comment path etc
  end
end
于 2011-04-18T15:53:30.173 に答える
2

Devise ログイン後に以前の URL にリダイレクトするための Stack Overflow で強調表示されている複数のソリューションがあります。

これはおそらく最も論理的な解決策であり、CanCan を含む解決策もあります (これを使用することをお勧めします)。

Rails: Warden/Devise - ログイン前/アクセス失敗前に URL を取得する方法

フォームへの入力に関しては、最初にコメント ボックスを制限するのが簡単な解決策だと思います。ユーザーがログインしているかどうかを確認します (Devise では user_signed_in だと思います)。else "コメントするには link_to サインインする必要があります". #new などのアクションにコメントがある場合は、devise を介して新しいアクション全体を制限できます。そのためには、認証「except」で :new を削除してください。

于 2011-04-18T15:52:31.977 に答える