1

そのため、私のアプリケーションのホームページには、ajax リクエストを介して呼び出すことができるさまざまなアクションがあります。ユーザーがサインインすると、これらの呼び出しを行うことができます。ユーザーがサインインしていない場合、ユーザーが ajax 呼び出しに移動するリンクのいずれかをクリックすると、ユーザーをサインイン ページにリダイレクトしたいと考えています。

私の sessions_helper には、これらのアクションのコントローラーで before_filter として使用されるメソッドがあります。

  def signed_in_user
    unless signed_in?
      store_location
      redirect_to signin_url, notice: "Please sign in."
    end
  end

ただし、呼び出しは ajax 経由で行われるため、これらの呼び出しではリダイレクトは機能しません。(記録のために、それは非 ajax 呼び出しで動作します) 例:

<%= link_to new_picture_path, remote: true  do %>
  Add New
<% end %>

このリダイレクトを ajax 経由で機能させる方法はありますか? Rails v3.2.8 と jquery を使用しています。他のいくつかの投稿が示唆しているように、次のメソッドをアプリケーションコントローラーに追加しようとしました:

def redirect_to(options = {}, response_status = {})
  if request.xhr?
    render(:update) {|page| page.redirect_to(options)}
  else
    super(options, response_status)
  end
end

しかし、「MissingTemplate pictures/update」というエラーが表示されます。そして、それらの他の投稿のいくつかは、私がプロトタイプではなくjqueryを使用しているためであることを示していると思います. どんな助けでも大歓迎です。

4

3 に答える 3

0

JavaScript コードで document.location.href を指定できます

document.location.href = '何/あなた/したい';

于 2012-11-22T20:19:20.930 に答える
0

非表示の段落を作成してコントローラーから値を渡すことができます.jsを介して、そのpに指定された単語が含まれているかどうかを確認し、必要な場所にリダイレクトする場合

def signed_in_user
    unless signed_in?
      store_location
      @redirect = 'redirect'
    end
  end

あなたのhtml.erbで

<p class='hide'><%= @redirect %> </p>

そしてjsファイルで

if ($('.hide').text() == 'redirect'){
//do the thing
}

少し面倒かもしれませんが、効率的なリダイレクト方法

于 2012-11-22T20:28:27.957 に答える
0

ajax 呼び出しがリダイレクトされるため、これは機能しませんが、ページは既に読み込まれており、リダイレクトは影響しません。

カスタムの redirect_to を削除します。これは役に立ちません。

ajax呼び出しが302を返したかどうかを確認する必要があります。次に、window.locationなどでjavascriptを使用してユーザーをリダイレクトできます。

于 2012-11-22T19:26:23.387 に答える