将rails表单提交到“友好”URL

时间:2011-12-16 00:03:21

标签: ruby-on-rails forms

我的网站上有一个搜索表单,允许用户搜索许多不同的方面,如城市,价格范围,大小等。

表单提交为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。

3 个答案:

答案 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,那么您的解决方案应该非常简单。

相关问题