在Rails中获取请求之后生成的默认URL不是很好看。
在Rails 3应用程序中使用meta_search gem,我创建了一个选择菜单,按类别过滤文章列表。代码如下所示:
<%= 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>
现在,提交表单时,会返回一个包含params散列的冗长URL:
http://localhost:3000/articles?utf8=%E2%9C%93&search[category_name_equals]=
Reviews&commit=Search
我希望尽可能保持网址清晰,例如:
http://localhost:3000/articles/category/reviews
或
http://localhost:3000/articles?category=reviews
有哪些解决方案可以让params hash URL更易被人类阅读?
答案 0 :(得分:1)
使用get方法的表单不能这样做。这是一个HTML问题。
您需要添加一些Javascript才能将您的网址转换为漂亮的网址,或者您可以在rails应用中的控制器中获取网址并重定向到漂亮的网址。
答案 1 :(得分: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>
对于你的路线,你会想要这样的东西,但DRYer:
routes.connect '/articles/browse/:category', :controller => :articles, :action => :browse
您可以非常轻松地找到许多CSS / JS下拉菜单示例:http://bit.ly/dRtQNd
你可以用更多的努力找到好的 CSS / JS下拉菜单的例子......除非你放弃再次询问有关堆栈溢出的建议:-)。 (从头开始编写标准UI组件的基本版本很简单,现在使用jQuery等等,所以很多人都这样做。编写“感觉正确”的实际上很难;更少的人这样做!)
P.S。那form_for @search
看起来非常奇怪。这不是form_for @your_model_object
的意思......