0

予約可能な部屋を表示する検索フォームがあります。部屋を予約してからブラウザの戻るボタンを押すと、検索結果が表示されたままになります。戻ってきたときにページをリロードして、利用可能な部屋を表示するためにユーザーが検索ボタンをもう一度クリックする必要があるようにすることはできますか? 結果のないデフォルトの検索フォームが必要ですか? 私は前にこれを試しました:

before_filter :set_cache_buster
def set_cache_buster
    response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
    response.headers["Pragma"] = "no-cache"
    response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
 end

しかし、これはユーザーの入力パラメータがまだ検索されている状態でページをリロードするだけなので、基本的にリロードしない場合と同じページが表示されます、ありがとう

4

1 に答える 1

2

フォームメソッドが「GET」の場合、戻るボタンを押したときにページが常に利用可能で、クエリ文字列がすべて url に含まれています。多くの場合、この効果が好まれます。たとえば、Google 検索の URL をブックマークできます。

フォームメソッドを「POST」に変更して、ページが再び利用できないようにすることができます。

追加

これは少し注意して使用してください。慣例では、「GET」はデータを取得することを意味し、「POST」はデータを追加することを意味します。検索フォームは get data 用に作成されているため、フォーム メソッドの規則は "GET" です。ここでは何も問題はありません。したがって、本当に必要な場合にのみ変更してください。

OPを追加して、フォームメソッドを変更できないと言った

パラメータ付きのURLではなく、ボタンをクリックしたときにのみ検索結果を表示したい場合は、ここにハックがあります。

アイデアは、ボタンをクリックしたときにJavascriptを使用して新しい非表示の入力を添付し、コントローラーがこの新しいパラメーターが存在するかどうかを確認することです。存在する場合は、処理して結果を返します。存在しない場合は、何らかのエラーを表示します。

# JavaScript
$('#the_form button').on('submit', function() {
  this.preventDefault();
  this.parent.append('<input type="hidden" name="human_hit" value="yes" />');
  this.parent.submit();
})

# Controller
def search
  if params[:human_hit]
    # Do search logic and deliver
  else
    redirect_to :back, alert: "You need to hit the button to search"
  end
end

これはハックであり、検証されていません。アイデアはうまくいくはずです。

于 2013-08-20T09:35:01.720 に答える