0

:delete リクエストがどのページから来ているかを判断する方法を知りたいですか? たとえば、ユーザーのホームページと番組ページの両方に表示されるウォール ポストがあります。ユーザーがホームページから投稿を削除すると、ユーザーがホームページにリダイレクトされ、ショー (プロファイル) ページから削除された場合、ユーザーはそこにリダイレクトされます。問題は、どこから来たのかを区別するのに苦労していることです。

:delete リクエストでは、:post ではないため、非表示の値を渡すことができないことを理解しています。パラメータを確認してみましたが、結局すべて同じです。:method、:controller、:action は同じです。

{"_method"=>"delete", "authenticity_token"=>"xNsfq27sBrpssTO8sk0aAzzIu8cvnFJEZ30c17Q+BCM=",
"action"=>"destroy", "controller"=>"pub_messages", "id"=>"33"}

私の破壊アクションには、次のものがあります。

def destroy
    @pub_message = PubMessage.find_by_id(params[:id])
    @pub_message.destroy
    redirect_to user_path(@pub_message.to_id)
end

しかし、常に user_path にリダイレクトするのではなく、root_path にリダイレクトしたいのですが、ユーザーがホームページ上でいつ破棄アクションを発行しているかを判断できません。

ビューで削除オプションを表示する場所は...

<% if current_user == feed_item.user or current_user == feed_item.to %>
   <%= link_to "delete", feed_item,     method: :delete,
                                        confirm: "You sure?",
                                        title: feed_item.content %>
<% end %>

どうすればこれを修正できますか?

4

4 に答える 4

2
redirect_to request.referer

または

redirect_to :back

前のページにリダイレクトします。

于 2012-06-01T08:21:32.837 に答える
1

リファラーを使用するために使用できますredirect_to :back

訪問者のブラウザの多くがリクエストの Referer ヘッダーを埋めていないことが心配な場合は、 from params を処理できます。

def destroy
  @pub_message = PubMessage.find_by_id(params[:id])
  @pub_message.destroy
  redirect_to user_path(@pub_message.to_id) and return if params[:from] == "profile"
  redirect_to home_path # no if to fallback
end

<% if current_user == feed_item.user or current_user == feed_item.to %>
  <%= link_to "delete", feed_path(feed_item, from: "profile"), method: :delete,
                                                               confirm: "You sure?",
                                                               title: feed_item.content %>
<% end %>
于 2012-06-01T08:26:42.633 に答える
1

追加のパラメータを渡すことができます:

<%= link_to "delete", feed_item_path(feed_item, :foo => :bar),
                 method: :delete,
                 confirm: "You sure?",
                 title: feed_item.content %>

それらを使用して、リダイレクト先を決定します。

これらをクエリ パラメータとして使用したくない場合は、それらのパラメータを渡す別のルートを設定できます。

于 2012-06-01T12:00:27.863 に答える
1

ここでredirect_to :back説明されているように、できます。これにより、リクエストから HTTP_REFERER に戻ります。

于 2012-06-01T08:19:51.633 に答える