我的网站上有一个搜索表单,允许用户搜索许多不同的方面,如城市,价格范围,大小等。
表单提交为GET,因此表单参数位于URL中。
他们最终变得非常丑陋:/搜索UTF8 =✓&安培; city_region =温哥华&安培; property_type_id = 1&安培; min_square_footage = 0&安培; max_square_footage = 15000
(它们实际上更糟糕,因为搜索参数是模型的一部分,所以URL中也有很多编码的[和]和)
我想做的是让表单生成如下的网址:
/搜索/温哥华/办公室?square_footage = 0-15000
其中一些参数放在URL路径本身,而其他参数保留在查询参数中(格式稍微可读)。
在rails应用程序中处理此问题的最佳方法是什么?我能想到的就是在表单上使用javascript代码提交来操作表单提交的URL。
答案 0 :(得分:6)
您可以在控制器中添加以下条件:
if params[:utf8]
redirect_to "/searches/#{params[:city_region]}/..."
end
答案 1 :(得分:1)
您只需为此类页面创建路由。
如果您使用的是Rails 3:
match '/search(/:city(/:property_type(/:min_square_footage(/:max_square_footage)))' => 'search#index', :as => :search
(这些括号引用一些可选的变量)
然后您可以在视图中使用以下内容调用它:
= link_to 'Search', search_url(:city_region => 'Vancouver', :property_type_id => 5, :min_square_footage => 0, :max_square_footage => 15000)
答案 2 :(得分:1)
TLDR:你能做到这一点的唯一方法是在表单上使用ajax然后重定向。
在搜索按钮上设置click事件,以触发ajax表单发布到控制器方法。
然后在杰克的答案中使用魔法并使用您生成的友好网址调用重定向...请记住,如果您希望谷歌找到您的友好网址,您需要将它们静态存放在某个页面上。如果您不关心SEO,那么您的解决方案应该非常简单。