2

私の最新のWebサイトには、次のように定義された検索フォームがあります。

= form_tag search_path(:termen), :method => :get do
  = text_field_tag :termen, params[:termen]
  = submit_tag "Search »"

そしてルート:

# search
get "search(/:termen)" => "articole#cauta", :as => :search

検索ボタンを押すと、次のようなURLが表示されます。

http://www.mysite.com/search/[the_termn_that_was_typed]

たとえば、「吸血鬼」を検索しているときは、次のようになります。

http://www.mysite.com/search/vampire

これに関する手がかりはありますか?

大いに感謝する、

4

2 に答える 2

6

これを行うRESTfulな方法は、投稿されたリクエストをリダイレクトして、希望するURLでリクエストを取得することだと思います。

ここに2つのルートがあります

resources :articles do
  collection do 
    get :search, :action => 'search_post', :as => 'search_post'
    get 'search/:q', :action => 'search', :as => 'search'
  end
end

ここで、コントローラーでPOSTリクエストをリダイレクトしてリクエストを取得します

def search_post
  redirect_to search_articles_path(params[:q])
end

フォームを送信した結果、ユーザーはURLにアクセスすることになります

http://www.mysite.com/articles/search/vampire
于 2013-01-09T10:02:55.753 に答える
1

フォームを直接使用する場合、これを回避することはできないと思います。これは、パラメーターが送信される方法だからです。ただし、少しのjavascriptでそれを行うことができます。少し不格好だと思う解決策を提供します。それが価値があるかどうかはあなたが決めることができます。

最初にjs(jQueryを使用):

$(".search_submit").click(function(){
  var button     = $(this);
  var form       = button.closest("form");
  var action     = form.attr("action");
  var text_field = form.find(".search_text");
  var value      = text_field.val();

  window.location = action + "/" + value;
  return false;
});

そして、ビューコードは適切なクラスを追加する必要があります。

= form_tag search_path(:termen), :method => :get do
  = text_field_tag :termen, params[:termen], :class => "search_text"
  = submit_tag "Search »", :class => "search_submit"

お役に立てば幸いです。

于 2012-04-08T18:56:09.280 に答える