2011-01-05 9 views
2

Railsでgetリクエストを行った後に生成されるデフォルトのURLは、見るのが非常に面倒ではありません。paramsハッシュを非表示にして、それをクリーンなURLに置き換えてください

Rails 3アプリケーションでmeta_search gemを使用して、カテゴリー別に記事のリストをフィルタリングする選択メニューを作成しました。コードは次のようになります、私はできるだけきれいにURLを維持したい

http://localhost:3000/articles?utf8=%E2%9C%93&search[category_name_equals]= 
Reviews&commit=Search 

:今

<%= form_for @search, :url => articles_path, :html => {:method => :get} do |f| %> 
    <%= f.label :category_name_equals, "Filter by category:" %> 
    <%= f.collection_select :category_name_equals, 
    Category.all(:order => "name"), :name, :name, :include_blank => true %> 
    <%= f.submit "Search" %> 
<% end %> 

<table> 
    <tr> 
    <th>Title</th> 
    <th>Category</th> 
    </tr> 
    <% for article in @articles %> 
    <tr> 
    <td><%= link_to article.title, article %></td> 
    <td><%= article.category.name %></td> 
    </tr> 
    <% end %> 
</table> 

フォームが送信されたときに、長いURLは、paramsハッシュを含む返されます例えば:

http://localhost:3000/articles/category/reviews 

または

http://localhost:3000/articles?category=reviews 

人間がparamsハッシュURLをより読みやすくするための解決策は何ですか?

答えて

1

getメソッドでフォームを使用することはできません。それはHTMLの問題です。

あなたのURLをpretty URLに変換するにはJavaScriptを追加する必要があります。または、あなたのrailsアプリケーションでコントローラのURLを取得し、きれいなURLにリダイレクトすることができます。

0

shingaraさんのように、フォームをまったく使用しないでください。代わりに、リンクのリストを使用して、あなたのリストの振る舞いは、/ドロップダウンメニューのように見えるいくつかのCSS/JSと空想物事アップ:あなたのルートの

<ul> 
    <% Category.all.each do |c| %> 
    <li> 
     <%= link_to(c.name, :controller => :articles, :action => :browse, :category => c.tag) %> 
    </li> 
    <% end %> 
</ul> 

、あなたはこのような何かをしたいでしょうが、ドライヤー:

routes.connect '/articles/browse/:category', :controller => :articles, :action => :browse 

あなたは非常に簡単にCSS/JSのドロップダウンの多くの例を見つけることができます:http://bit.ly/dRtQNd

あなたはかなりの労力で良い CSS/JSドロップダウンメニューの例を見つけることができます...あなたは与えない限り、ちょうどadvを求めるスタックの氷が再びオーバーフロー:-)。 (標準UIコンポーネントの初回バージョンのコーディングは、最近jQueryやその他のものを使用しているため、多くの人がそれを行います。そのform_for @searchはまったく奇妙に見えます。これはform_for @your_model_objectが意味するものではありません...

関連する問題