Ruby on rails 将rails表单提交给;友好的;统一资源定位地址
我在我的网站上有一个搜索表单,允许用户从城市、价格范围、大小等多个方面进行搜索 表单作为GET提交,因此表单参数位于URL中 他们最终变得相当丑陋: /搜索?utf8=✓&城市地区=温哥华&地产类型=1&最小面积=0&最大面积=15000 (事实上,它们甚至更糟糕,因为搜索参数是模型的一部分,所以URL中也有很多编码的['s and]'s) 我想做的是让表单生成如下URL: /搜索/温哥华/办公室?平方英尺=0-15000 其中一些参数放在URL路径本身中,而另一些参数放在查询参数中(以可读性稍高的格式)Ruby on rails 将rails表单提交给;友好的;统一资源定位地址,ruby-on-rails,forms,Ruby On Rails,Forms,我在我的网站上有一个搜索表单,允许用户从城市、价格范围、大小等多个方面进行搜索 表单作为GET提交,因此表单参数位于URL中 他们最终变得相当丑陋: /搜索?utf8=✓&城市地区=温哥华&地产类型=1&最小面积=0&最大面积=15000 (事实上,它们甚至更糟糕,因为搜索参数是模型的一部分,所以URL中也有很多编码的['s and]'s) 我想做的是让表单生成如下URL: /搜索/温哥华/办公室?平方英尺=0-15000 其中一些参数放在URL路径本身中,而另一些参数放在查询参数中(以可读性稍
在rails应用程序中处理此问题的最佳方法是什么?我所能想到的就是在表单提交上使用javascript代码来操作表单提交到的URL。您所需要的就是为此类页面创建路由 如果您在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)
TLDR:实现这一点的唯一方法是在表单上使用ajax,然后使用重定向 在搜索按钮上设置click事件,以触发向控制器方法发送ajax表单
然后使用杰克回答中的魔法,使用你生成的友好url调用重定向。。。只要记住,如果你想让谷歌找到你的友好url,你需要把它们静态地放在某个页面上。如果您不关心SEO,那么您的解决方案应该非常简单。您可以向控制器添加以下条件:
if params[:utf8]
redirect_to "/searches/#{params[:city_region]}/..."
end
如果不清楚的话,最终URL会是这样的:除了我没有处理链接之外——页面呈现一个表单,用户填写该表单,提交该表单就是生成URL的原因(表单使用GET而不是POST)。