0

私はサインインしていますか? 5 分間非アクティブな場合にランディング ページに戻るレールのメソッド。

5 分経過した後にユーザーが js 経由で送信されたフォームをクリックしたときに、これを機能させるにはどうすればよいですか? 明らかに、これが発生すると、サーバーはランディング ページをユーザーに送り返しますが、表示されません。これが私のsigned_inメソッドです

def signed_in?
  unless current_user
    flash[:notice] = "Please log in"
    redirect_to root_url
  else
    if session[:expiry_time].nil? || session[:expiry_time] < 5.minutes.ago
      reset_session
      flash[:notice] = "Please log in"
      redirect_to root_url
    else
      session[:expiry_time] = 300.seconds.from_now
    end
  end
end

PS: 私はそれが恐ろしいコードであることを知っています, 私はそれを必ずリファクタリングします:)

4

2 に答える 2

0

これは私が思いついた解決策です、私はそれがより簡単だと思います。signed_inメソッドの場合:

respond_to do |format|
    format.js {
      flash[:notice] = "Please log in"
      render 'home/not_logged_in'
    }

そして、not_logged_inビューで

window.location = '<%= root_url %>';
于 2012-08-18T23:36:45.723 に答える
0

But I'd start by implementing an alternate redirect method that does a full redirect even for XHR requests:

def redirect_with_js location
  if request.xhr?
    # HTML response is expected:
    render :text => "<script>document.location = '#{view_context.escape_javascript location}'</script>"
    # JS response is expected:
    # render :text => "document.location = '#{view_context.escape_javascript location}'"
  else
    redirect_to location
  end
end

Then use this method when redirecting:

redirect_with_js boomeranked_url

The returned text depends on what type of response the AJAX request expects to get back (HTML or JS). I've included both versions. This should give you something to start with.

于 2012-08-18T19:07:26.650 に答える